【模板】nim游戏

tech2024-04-07  67

前往:我自己搭建的博客

题目

洛谷P2197nim游戏

题解

假设第i堆石子有ai个。

当所有物品都被取完后,x=0,对手取走最后一个,我方失败。

若x!=0,设x的二进制表示下的最高位的1在第k位,那么至少存在一个ai,它的第k位为1,。显然,对ai有一种取法,使得x=0。

若x=0,任意一种取法都会导致x!=0。

综上,由数学归纳法得:x!=0先手必胜,因为永远可以让对手面对x=0的局面;x=0先手必败,因为永远可以让对手面对x!=0的必胜局面。

代码

#include <bits/stdc++.h> using namespace std; int n; inline bool nim() { int ans=0,tmp; for(int i=1;i<=n;i++) scanf("%d",&tmp),ans^=tmp; if(ans) return 1; else return 0; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); if(nim()) printf("Yes\n"); else printf("No\n"); } return 0; }
最新回复(0)