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` 开源。