luogu#P8944. The Da Vinci Code
The Da Vinci Code
题目背景
圣杯在罗斯琳教堂下静待。
大师杰作掩映中相拥入眠。
剑刃圣杯守护着她的门宅。
星空下她可安息无碍。
好的题目不需要花里胡哨的背景。
题目描述
给定一个长度为 的数列 ,初始情况下 。
另有一个取值在 内的随机的整数 ,它取 的概率为 。
接下来进行 次操作,每次均匀随机地选两个 中的整数 (允许 ),交换 的值(如果 则什么也不干)。问最后 在位置 上的概率,你需要对所有 求出答案。你需要输出答案模 的值。
我们定义 在位置 上指 。
输入格式
一行三个整数 。接下来使用如下代码生成 :
#include <cstdio>
typedef unsigned long long ull;
typedef unsigned int uint;
typedef long long ll;
const uint mod = 3221225473u;
const int N = 20000010;
ull seed;
ull getnext() {
seed ^= seed << 13;
seed ^= seed >> 17;
seed ^= seed << 5;
return seed;
}
uint rd(uint l, uint r) {
return getnext() % (r - l + 1) + l;
}
int n;
ull k;
uint b[N];
int main() {
scanf("%d%llu%llu", &n, &k, &seed);
ull sum = 0;
for (int i = 1; i < n; ++ i) b[i] = rd(2u, mod - 1), (sum += b[i]) %= mod;
b[n] = mod + 1 - sum;
}
输出格式
设 表示 在位置 上的概率模 ,则输出 的异或和。
2 9 998244353
2684354563
7 3 123456789
24313281849
10 9000000000000000000 1000000000000000000
20026214895
4 0 123456789
12357556560
提示
【样例解释】
对于样例 #1:
数组为 ,操作 次后 在两个位置的概率均为 。
对于样例 #2:
数组为 $\{1863763622,1043615898,1055155266,1556793106,1763540175,1239801170,1141007183\}$。
【数据范围】
对于 的数据:
- ,。
- ,。
- 数据保证 且 是质数。
本题采用捆绑测试。
分值 | |||
---|---|---|---|