U276219 Yet another permutation problem

题目描述

曾经有过这样一个问题:给定一个长度为 $n$ 的正整数序列 $a_1,a_2\dots a_n$,要求将这个序列重排成序列 $a'$,使得相邻项都不相同,也就是 $\forall i\in [1,n-1],a'_i\neq a'_{i+1}$。 这个问题实在太简单了,于是你想试试不知道这个序列的时候能否解决这个问题。 你可以进行如下提问:向交互库输入 $(x,y)(x\neq y)$,交互库会返回 $a_x\neq a_y$ 是否成立。如果成立返回 $1$,否则返回 $0$。 提问结束后你需要回答出一种重排的方案,或报告无解。 ### 交互格式 你不需要定义主函数,你只需要定义一个函数: ```cpp extern "C" vectorsolve(int n,int lim) ``` 其中 $n$ 表示序列长度,$lim$ 表示最多问询次数,返回的 `vector` 表示答案。如果有解返回一个长度为 $n$ 的排列,否则返回一个空的 `vector`。 在这个函数中你可以调用 `query(x,y)`,表示问询 $a_x\neq a_y$ 是否成立。 以下是样例程序: ```cpp #include using namespace std; extern "C" bool query(int x,int y); extern "C" vectorsolve(int n,int lim){ vectorans; return ans; } ``` 如果对交互过程有疑问,请看提示中的样例。

输入格式

见交互格式。

输出格式

见交互格式。

说明/提示

举例:原序列 $a=[1,1,2]$。 调用 `query(1,2)`,相同,返回 $0$。 调用 `query(1,3)`,不同,返回 $1$。 调用 `query(2,3)`,相同,返回 $1$。 返回答案 `1 3 2`,符合要求。 你可以通过下发文件中的 `grader.cpp` 检测自己程序的正确性。 对于所有数据,都有 $T=200,2\le n\le 1000$。 数据范围如下表: | 测试点编号 |$n$ | $lim$ | 特殊性质 | | :-----------: | :-----------: | :-----------: | :-----------: | | $1,2,3$ |$\le 9$ | $=\frac{n(n-1)}{2}$ | 无 | | $4,5,6$ |$\le 100$ | $=\frac{n(n-1)}{2}$ | 无 | | $7,8$ |$\le 1000$ | $=2n$ | 保证 $a_i\le 2$ | | $9,10$ |$\le 1000$ | $=2n$ | 保证 $a_i\le 3$ | | $11,12,13,14$ |$\le 1000$ | $=3n$ | 无 | | $15,16,17$ |$\le 1000$ | $=2n$ | 无 | | $18,19,20$ |$\le 1000$ | $=\lceil 1.5n \rceil$ | 无 |