#P7953. [✗✓OI R1] 逆转比特
[✗✓OI R1] 逆转比特
题目背景
myy 正在广东佛山游玩,所以他出了一道 高明 的题目。
题目描述
一个点在长为 的只含有 0/1 的序列上随机游走,点的初始坐标为 ,重复进行以下操作:
- 当序列全为一种字符时,停止操作;
- 记点当前位置 ,等概率随机选择一个点 ,把点移动到 ,将 处的字符的取反,总代价加上 ,这里 ,其中 是两个给定常数;
- 回到第一条。
你需要进行 次修改,具体而言,每次修改包括
- 将序列第 位的 0/1 翻转;
- 查询初始坐标为 时,停止操作后的期望代价。
注意,一旦修改一直有效。
你需要输出 次询问期望代价模 的结果的异或和。
考虑到输入输出量比较大,数据采用如下随机生成方式
struct Random {
unsigned long long X;
void init(unsigned long long seed) { X = seed; }
unsigned long long Rand() {
X ^= X << 13;
X ^= X >> 7;
X ^= X << 17;
return X;
}
} R;
初始 01 串生成,会提供 。
R.init(seed1);
for (int i = 1; i <= n; i++) seq[i] = R.Rand() & 1;
对于 次询问,会提供 。
R.init(seed2);
for (int i = 1; i <= q; i++) {
idx = R.Rand() % n + 1, p = R.Rand() % n + 1;
ans ^= query(idx, p);
}
输入格式
一行六个整数 ,具体含义见「题目描述」。
输出格式
一行一个整数 ,表示 次询问期望代价模 的结果的异或和。
3 3 114514 1919810 0 1
831870297
5 3 998244353 1000000007 1 1
694472000
21 17 233 234 5 17
367211664
提示
【样例解释】
对样例一的解释:
三次询问分别为:,,答案为 ;,,答案为 ;,,答案为 。模 意义下分别为 、 和 ,异或和为 。
【数据范围】
本题采用子任务评测。
对于 的数据,满足 ,,,。
子任务 | 特殊性质 | 子任务得分 | 依赖子任务 | 时间限制 | ||
---|---|---|---|---|---|---|
0 | A | 5 | 1s | |||
1 | / | 18 | Subtask 0 | |||
2 | 12 | Subtask 0~1 | ||||
3 | A | 10 | Subtask 0 | |||
4 | / | Subtask 0~3 | ||||
5 | 45 | Subtask 0~4 | 2s |
特殊性质 A:。
按照惯例,这里应该有一个有趣的后记,但是已经阿克月赛的你想必是没有耐心去看的,所以没有。