做这题的时候我发现一个关于异或运算的性质:0-3,4-7,……从模4余0到模4余3每4个连续数的nim和均为0!
然后这题就是很简单的裸nim题了。
#include <cstdio> #include <cstring> #include <cctype> #include <cstdlib> #include <ctime> #include <climits> #include <cmath> #include <iostream> #include <string> #include <vector> #include <set> #include <map> #include <list> #include <queue> #include <stack> #include <deque> #include <algorithm> using namespace std; typedef long long ll; const int maxn = 100010; int n; ll x,m,ans,t,r; int main() { while (scanf("%d",&n)==1) { ans=0; while (n--) { scanf("%I64d%I64d",&x,&m); r=x%4; for (int i=0;i<4-r;i++) ans=ans^(x+i); r=(x+m-1)%4; for (int i=0;i<r+1;i++) ans=ans^(x+m-1-i); } if (ans) puts("tolik"); else puts("bolik"); } return 0; }