算账
Description
诺德镇有很多宝物,比如夹克老爷的宝算盘就可以通过运行一段C++程序来帮助算账
有一天夹克老爷的账房跟师爷说想要把自家长工的工资表排一下序,因此师爷迅速提起毛笔写了以下算法。
#include <algorithm>
int randint(int L,int R) {
static long long X = 1;
const long long A = __A__, B = __B__;
X = (X * X + A * X + B) % 99824353LL;
return X % (R - L + 1) + L;
}
void Qsort(int A[], int L, int R)
{
if (L >= R)
return;
int l = L;
int r = R;
int index = randint(L, R);
int key = A[index];
std::swap(A[l], A[index]);
while (l < r)
{
while (l < r && A[r] >= key)
--r;
A[l] = A[r];
while (l < r && A[l] <= key)
++l;
A[r] = A[l];
}
A[l] = key;
Qsort(A, L, l - 1);
Qsort(A, l + 1, R);
}
最终调用的时候会按照以下方法调用
Qsort(A_list,1,N);
这里\(A\_list\)数组代表长工的工资单,它是一个下标从\(1\)开始,在\(N\)处结束,长度为\(N\)的一个\(1\)~\(N\)的排列。
师爷很快且正确地完成了这项工作,于是迅速把这份代码交给了账房,并声称这份代码比南越的 采风官跑的都快。然而经验丰富的账房先生却一眼发现了问题,即对于特定的\(A\_List\)输入,\(Qsort\) 函数的递归深度会变得非常之高。但是账房先生一时语塞,竟然把刚刚想出来的特定\(A\_List\)输入忘记了!
现在,请聪明的你请帮助账房先生说出他刚刚忘记的特定\(A\_List\),使得\(Qsort\)函数的递归深度达到 最大值。账房先生比较喜欢看大布告,所以当有多个符合要求的\(A\_List\)时,输出其中字典序最大的。
Format
Input
一行一共三个整数 \(N\),\(\_\_A\_\_\),\(\_\_B\_\_ \)
\(N\)表示\(A\_List\)长度,\(\_\_A\_\_\),\(\_\_B\_\_\)的意义与\(randint\)中的响应变量意义相同。
其中\(1 \leq N \leq 100,000\),\(0 \leq \_\_A\_\_,\_\_B\_\_ < 99824353\)
Output
输出一行\(N\)个整数,第\(i\)个数描述了所求\(A\_List\)中原下表为\(i\)的位置对应的数。
Sample 1
Input
3 1 2
Output
3 1 2
Limitation
1s, 128MiB for each test case.
Hint
样例解释
step1. L=1,R=3,index=2,A_list[1:3]=[3,1,2] ->[1,3,2]
step2. L=2,R=3,index=2,A_list[2:3]=[3,2]->[2,3]
step3. L=3,R=3, return void
数据范围
对于30%的数据,\(1 \leq N \leq 10\);
另有20%的数据,\(1 \leq N \leq 12\),\(1 \leq \_\_A\_\_,\_\_B\_\_ \leq 4\);
对于50%的数据,\(1 \leq N \leq 2000\);
对于100%的数据,\(1 \leq N \leq 100000\),\(0 \leq \_\_A\_\_,\_\_B\_\_ < 99824353\)
Source
CSP 2019 综合测试题(四)
信息
- ID
- 1023
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者