这题需要你对时空复杂度有所了解。
不难发现 map 的复杂度为 O(p\log p),且常数大,非常容易超时,即使是 unmap 也因为常数过大而不能用。
其实这题直接开一个数组就好了,考虑 int,因为 4\times10^7\div2^{20}\approx38MB 可以过题。时间复杂度为 O(n+p)。
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll seed, p, n, a;
ll nextRand()
{
static ll x = seed;
x ^= x << 14;
x ^= x >> 45;
x ^= x << 11;
return (x % p + p) % p;
}
int h[10000010], ans;
signed main()
{
memset(h, -1, sizeof h);
cin >> n >> seed >> p;
for (int i = 1; i <= n; ++i)
{
ll op = nextRand() % 2;
if (op == 0) // 操作 1
{
ll x = nextRand();
ans = ans ^ h[x];
}
else
{
ll x = nextRand();
ll y = nextRand();
h[x] = y;
}
}
cout << ans;
return 0;
}