Codeforces 15C Industrial Nim 简单博弈

题目链接:点击打开链接

题意:

给定n

下面n行,每行2个数u v 表示有v堆石子:u,u+1,u+2···u+v-1

问先手必胜还是后手必胜

思路:

首先根据Nim的博弈结论

把所有数都异或一下,看结果是0还是非0

而这里因为数字太多所以想优化

那么其实对于一个序列 u, u+1, u+2 ····

显然 {4,5} {,6,7}, {8,9} 这样2个一组的异或结果就是1

那么只需要把序列分组,分成{偶数,奇数}

然后Y一下。。



#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define N 123456
#define ll __int64
ll n;
ll a[N],b[N];
int main(){ll i,j;while(cin>>n){ll ans = 0;for(i=1;i<=n;i++) {cin>>a[i]>>b[i];ll endd = a[i]+b[i]-1;if(a[i]&1) {ans ^= a[i];a[i]++, b[i]--;}if(b[i]) {ll siz = b[i]>>1;if(siz&1)ans^=1;if(b[i]&1)ans^=endd;}}ans?puts("tolik"):puts("bolik");}return 0;
}



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部