1906. map2

这题需要你对时空复杂度有所了解。

不难发现 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; }