1903. 选数

给定长为 n 的随机序列 a,下标从 0 开始。给定随机数种子 seed,则 a 由如下随机算法 C++ 代码生成:(如果你是其他语言选手,请自行实现如下随机算法)

#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; long long seed, n, a[maxn]; long long nextRand() { static long long x = seed; x ^= x << 11; x ^= x >> 45; x ^= x << 14; return (x % n + n) % n; } signed main() { cin.tie(0)->ios::sync_with_stdio(false); cin >> n >> seed; for (int i = 0; i < n; ++i) { a[i] = nextRand(); } return 0; }

f(x)=\sum_{i=0}^{n-1}a_i\oplus (x\times i)\pmod n。其中 \oplus 是异或运算。请从 [0,n) 里选择两个不同的数 u,v,使得 f(u)=f(v)

输入

输入一行两个整数 n,seed(3\le n\le10^5,1\le seed\le10^9)。保证至少有一个解。

输出

输出一行两个整数 u,v(0\le u,v < n,u\neq v)

如果有多个解,输出任意一个即可。

样例

标准输入 复制文本
5 1919810
标准输出 复制文本
0 2

提示

对样例,a=(4,1,2,0,0)。计算得:f(0)=2,f(1)=1,f(2)=2,f(3)=1,f(4)=2,选择方案有 (0,2),(0,4),(2,4),(1,3) 四种。

题目不保证 f(x) 一定能以低于 O(n) 的复杂度计算,请不要尝试化简或加速 f(x) 的运算。

来源

2022CS杯预选赛

登录以提交代码。
单点时限 2 秒
内存限制 256 MB
提交 6
通过 4