P1366 双指针
Usada_Pekora · · 题解
题意很清晰,在此不再分析,解法要求时间空间都是线性的。
注意到题目给出了一个特殊性质:
也就是说与
于是从左到右扫一下就好了,对于每个
复杂度
#include <bits/stdc++.h>
using namespace std;
inline uint64_t read() {
uint64_t x = 0;
char ch = getchar();
while (!isdigit(ch))
ch = getchar();
while (isdigit(ch))
x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar();
return x;
}
uint64_t a[10000001], b[10000001];
signed main() {
for (int T = read(), n, m; (T--) && (n = read(), m = read()); ) {
for (int i = 1; i <= n; i++)
a[i] = read();
for (int i = 1; i <= m; i++)
b[i] = read();
int j = 1, cnt = 0, ans = 0;
for (int i = 1; i <= n; i++) {
cnt = 0;
while (j <= m && a[i] >= b[j]) {
cnt += (a[i] == b[j]);
j++;
}
ans ^= cnt;
}
printf("%d\n", ans);
}
return 0;
}