http://codevs.cn/problem/1582/
首先我打了一张50*50的表(4用#代替)
并没有发现什么规律!
然后观察题解可得,我观察的是TimeMachine学长的题解
什么得到sg(i,j)=k的必要条件:
(i-1)%2k+1<2k
(j-1)%2k+1<2k
最小的k极为sg函数值。
然后log级别暴力找就可以了QAQ
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int in() {
int k = 0, fh = 1; char c = getchar();
for(; c < '0' || c > '9'; c = getchar())
if (c == '-') fh = -1;
for(; c >= '0' && c <= '9'; c = getchar())
k = k * 10 + c - 48;
return k * fh;
}
int n, a, b, ans;
int sg(int x, int y) {
ll num = 2; --x; --y;
for(int k = 0; ; ++k, num <<= 1)
if (x % num < num / 2 && y % num < num / 2)
return k;
}
int main() {
int T; T = in();
while (T--) {
n = in(); ans = 0;
while (n) {
n -= 2;
a = in(); b = in();
ans ^= sg(a, b);
}
puts(ans ? "YES" : "NO");
}
return 0;
}