[CF15C] Industrial Nim - 博弈
Description
若干个区,第 i 个区中有 mi 堆石子,第 j 堆石子有 xi+j-1 个。合起来玩 Nim,判断胜负。
Solution
很明显这只是一个求连续自然数异或和的问题
由于 (2n) xor (2n+1) = 1,显然这玩意一定会以某种规律循环
若干个区,第 i 个区中有 mi 堆石子,第 j 堆石子有 xi+j-1 个。合起来玩 Nim,判断胜负。
我们发现,当 i mod 4 = 0,1,2,3 时,1,2,3,...,i 的异或和为 i,1,i+1,0
#include <bits/stdc++.h>
using namespace std;
#define int long long
int f(int x)
{
if (x % 4 == 0)
return x;
if (x % 4 == 1)
return 1;
if (x % 4 == 2)
return x + 1;
if (x % 4 == 3)
return 0;
}
signed main()
{
ios::sync_with_stdio(false);
int n;
cin >> n;
int ans = 0;
while (n--)
{
int x, m;
cin >> x >> m;
ans ^= f(x + m - 1) ^ f(x - 1);
}
cout << (ans ? "tolik" : "bolik");
}