题意
Task1:试判断能否构造并构造一个长度为 n 的 1…n 的排列,满足其 n 个前缀和在模 n 的意义下互不相同。若存在,请给出一种构造方案。
Task2:试判断能否构造并构造一个长度为 n 的 1…n 的排列,满足其 n 个前缀积在模 n 的意义下互不相同。若存在,请给出一种构造方案。
测试点类型 1:10 分,满足 X=1,1≤n≤10。
测试点类型 2:40 分,满足 X=1,1≤n≤105。
测试点类型 3:10 分,满足 X=2,1≤n≤10。
测试点类型 4:40 分,满足 X=2,1≤n≤105。
样例输入 #1
样例输出 #1
2 8 7 6 5 4 3 2 1
plaintext
样例输入 #2
样例输出 #2
2 1 2 3 5 10 6 7 4 9 8 11
plaintext
题解
设序列为 ai,分别讨论两个子任务。
Task1
设 si=(j=1∑iai)modn,可以有如下发现:
- ∀l,r,sl≡sr(modn) 当且仅当 sr−sl−1≡0(modn). 因此不存在区间 [l,r] 的区间和是 n 的倍数。
- 当 ai=n 时,i=1.
- 若 2∤n 且 n=1,无解。
接下来对有解情况进行构造。
发现 n 必定为偶数,要想让 s 构成 modn 意义下的完全剩余系,考虑把所有偶数在模意义下取相反数。
也就是说,使:
s={0,1,−2,3,−4,5,⋯,n−1}
注意到,所有偶数的符号为负,再加上 n 变为正数后,仍为偶数,所以 s 仍然满足题意。
则有 ai 的通项公式:
ai={n−i+1,i−1,2∣i2∤i
注意 a1=n=0.
Task2
设 si=(j=1∏iai)modn,可以有如下发现:
- ∀l,r,sl≡sr(modn) 当且仅当 sl−1sr≡0(modn). 因此不存在区间 [l,r] 的区间积是 n 的倍数。
- 当 ai=n 时,i=n.
- 当 ai=1 时,i=1.
- 当 n 为合数时(4 除外),n∣(n−1)!,所以 sn−1≡sn(modn),无合法方案。
因此序列开头为 1,末尾为 n,n 为质数,想到 si=i 是否可行?
下面在 si−1+1≡si(modn) 的情况下构造:
si−1+1si−1×(ai−1)ai≡si−1×ai≡1=inv(si−1)+1(modn)(modn)(modn)
于是可以从头开始递推完成构造。