U496941 【EVA-03】剧终 / 劇終

题目背景

>「所以,我的梦在哪里?」 >「那是现实的延续。」 >「那,我的现实在哪里?」 >「那是梦的终结。」 一切都已经结束了。 但是总有两个人类还活着。

题目描述

补完后的世界中剩下了一个共有 $ n $ 个自然数的数列 $ a $,其中的第 $ i $ 个数为 $ a_i $。 真嗣想要使得这个数列单调不下降,于是他决定更改这个数列。 他可以作以下几种操作: 1. 对于任意的正整数 $ i $ ,交换 $ a_i $ 与 $ a_{i+1} $ ,保证 $ i \lt n $ 。 2. 对于任意的两个正整数 $ i, j $ ,交换 $ a_i $ 与 $ a_{ij} $,保证 $ i, j \lt i \times j \le n $ 。 3. 对于任意的两个自然数 $ i, j $ ,令 $ a $ 中所有原值为 $ i $ 的数的值更改为 $ j $ 。 真嗣可以 **无限次** 作 $ 1 $ 号操作,但是由于真嗣的能力有限,他最多只能作 $ m $ 次 $ 2 $ 号操作与 $ p $ 次 $ 3 $ 号操作,求 **次小** 的操作次数以及对应字典序 **最大** 的操作序列。 ### 交互说明 **本题是一道交互题,采用 grader 交互**,你不应该也不被允许在程序中实现 `main` 函数。 本题仅限 C++11/C++14/C++17/C++20 提交。 你应该实现以下函数: ```cpp void tmain(std::vector a, std::uint32_t n, std::uint32_t m, std::uint32_t p); ``` 你所实现程序的主要逻辑函数,保证仅调用一次,传入参数的意义见题目描述。 你可以使用以下函数: ```cpp void report(uint8_t type_, uint32_t i, uint32_t j); ``` 代表答案序列中 **从前往后按顺序** 的一次操作,`type_`为操作的种类, `i` 与 `j` 表示操作中的两个参数 $ i $ 与 $ j $ ,对于 $ 1 $ 号操作, `j` 应该恒为 $ 0 $ 。 ```cpp void report_time(uint64_t t); ``` 代表答案中的操作次数。 在答案通过 `report` 与 `report_time` 函数输出后应当尽快返回函数,否则可能会因为未能返回导致 TLE 。

输入格式

**作为选手,你不应该也不可以从标准输入读取数据**,该输入格式是交互库的输入格式。 由于数据可能过大,本题采用一种奇怪的方式产生数据。 输入共 $ 1 $ 行。 第 $ 1 $ 行有 $ 2 $ 个正整数 $ seed $ 与 $ n $, $ seed $ 表示随机数据的种子, $ n $ 见题面解释。 对于 C++ ,这里给出一个示例的数据产生器: ```cpp void _generate( uint64_t seed, std::vector& a, std::uint32_t n, std::uint32_t& m, std::uint32_t& p, std::uint32_t maxm, std::uint32_t maxp, std::uint64_t maxa ) { std::mt19937 rand32(seed); std::mt19937_64 rand64(seed); std::uniform_int_distribution disa(0, maxa); std::uniform_int_distribution dism(0, maxm); std::uniform_int_distribution disp(0, maxp); m=disp(rand32);p=disp(rand32); a.push_back(0); for(uint32_t i = 1; i

输出格式

**作为选手,你不应该也不可以向标准输出写入数据**,该输出格式是交互库的输出格式。 输出共 $ 1 $ 行。 第 $ 1 $ 行是 $ 1 $ 个自然数 $ s $ ,含义如下所述: 1. $ s=0 $ ,程序顺利运行且结果正确 2. $ s=1 $ ,程序顺利运行但结果错误 3. $ s=2 $ ,函数调用不符合规范 4. $ s=3 $ ,交互库内部错误(此时的 WA 不算你的锅力) 测评器会完全按照输出的数进行判别,若 $ s = 0 $ 则结果为 AC ,否则为 WA 。

说明/提示

~~本题提供一交互库的示例实现,仅适用于给出的标准样例,[戳我在浏览器里下载](https://github.com/cstring_h/EFF4M/blob/master/example_grader.cpp "虽然貌似已经炸掉了(")或者[戳我使用BiliDrive下载](bdrive://d28784bff2a66450a6c331fb322acbccd382228e "好像也炸掉了(")。~~ ~~**注:原题交互库已蒸发,故本题暂无法提交。**~~ **2025.8.16更新:已经在[戳我戳我](https://www.luogu.com.cn/paste/mv92s7da "感谢豆包为我贡献了这个神奇的码量……")提供了一个示例交互库。** **由于本题实现较为困难且作者(cstring_h)未有时间进行完善,本题不提供输入与输出样例。** 本题共 $ 20 $ 个测试点 对于 $ 10\% $ 的数据, $ n \le 1 \times 10^2 $ ,$ m, p \le 50 $ 。 对于 $ 30\% $ 的数据, $ n \le 1 \times 10^3 $ , $ m, p \le 1 \times 10^2 $ 。 对于 $ 50\% $ 的数据, $ n \le 1 \times 10^4 $ , $ m, p \le 5 \times 10^2 + 5 $ 。 对于 $ 90\% $ 的数据, $ m, p \le 1 \times 10^4 $ , $ a_i \le 10^8 $ 。 对于 $ 100\% $ 的数据, $ n \le 1 \times 10^5 $ , $ m, p \le 3 \times 10^4 $ , $ a_i \le 10^{14} $ , $ \sum{a_i} \le 10^{18} $ 。 ### 附注 本题原题链接已爆炸(原本应该是 Tsinsen 上的),故交互库、 Special Judge 由于我是蒟蒻没法实现(捂脸),亟待巨犇贡献。 输入与输出样例尊重原题作者意愿不予提供。 最后更新:2024.10.26 原作者: cstring_h 根据原作者的说明,本题依照 `CC BY-NC 4.0` 协议公开并开放源码,且交互库依照 `MIT License` 开源。