luogu#P8944. The Da Vinci Code

    ID: 12929 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 4 上传者: 标签>动态规划,dp数学2023洛谷原创O2优化矩阵加速,矩阵优化

The Da Vinci Code

题目背景

圣杯在罗斯琳教堂下静待。
大师杰作掩映中相拥入眠。
剑刃圣杯守护着她的门宅。
星空下她可安息无碍。

好的题目不需要花里胡哨的背景。

题目描述

给定一个长度为 nn 的数列 aa,初始情况下 ai=ia_i=i

另有一个取值在 [1,n][1,n] 内的随机的整数 xx,它取 ii 的概率为 bib_i

接下来进行 kk 次操作,每次均匀随机地选两个 [1,n][1,n] 中的整数 i,ji,j(允许 i=ji=j),交换 ai,aja_i,a_j 的值(如果 i=ji=j 则什么也不干)。问最后 xx 在位置 ii 上的概率,你需要对所有 1in1\leq i\leq n 求出答案。你需要输出答案模 32212254733221225473 的值。

我们定义 xx 在位置 ii 上指 ai=xa_i=x

输入格式

一行三个整数 n,k,seedn,k,seed。接下来使用如下代码生成 bib_i

#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;
}

输出格式

ansians_i 表示 xx 在位置 ii 上的概率模 32212254733221225473,则输出 ansi×ians_i\times i 的异或和。

2 9 998244353

2684354563

7 3 123456789

24313281849

10 9000000000000000000 1000000000000000000

20026214895

4 0 123456789

12357556560

提示

【样例解释】

对于样例 #1:

bb 数组为 {2134949164,1086276310}\{2134949164 ,1086276310\},操作 99 次后 xx 在两个位置的概率均为 12\dfrac12

对于样例 #2:

bb 数组为 $\{1863763622,1043615898,1055155266,1556793106,1763540175,1239801170,1141007183\}$。

【数据范围】

对于 100%100\% 的数据:

  • 2n2×1072\leq n\leq2\times10^70k,seed<2640\leq k,seed<2^{64}
  • 1<bi<32212254731<b_i<3221225473i=1nbi1(mod3221225473)\sum\limits_{i=1}^n b_i\equiv 1\pmod{3221225473}
  • 数据保证 1<bn<32212254731<b_n<322122547332212254733221225473 是质数。

本题采用捆绑测试

Subtask\text{Subtask} nn\le kk\le 分值
00 22 26412^{64}-1 11
11 55 44
22 200200 200200 66
33 26412^{64}-1 99
44 20002000 77
55 2×1072\times10^7 11 55
66 10610^6 88
77 2×1072\times10^7 10710^7 1010
88 10610^6 26412^{64}-1 1515
99 2×1072\times10^7 3535