-
#include<bits/stdc++.h> using namespace std; #define maxn 55 int sg[maxn],vis[maxn]; int t,n,ans,a; void getSG() { memset(sg,0,sizeof(sg)); for(int i=1; i<=30; i++) { memset(vis,0,sizeof(vis)); for(int j=1; j<=i/2; j++) vis[sg[i-j]]=1; for(int j=0; j<=30; j++) { if(vis[j]==0) { sg[i]=j; break; } } } for(int i=1; i<=30; i++) printf("%d ",sg[i]); } int SG(int x) { if(x%2==0) return x/2; return SG(x/2); } int main() { scanf("%d",&t); for(int i=1; i<=t; i++) { scanf("%d",&n); ans=0; while(n--) { scanf("%d",&a); ans^=SG(a); } printf("Case %d: ",i); if(ans==0)printf("Bob\n"); else printf("Alice\n"); } return 0; }
I - Again Stone Game
- LightOJ - 1296
- 题意:n堆石子,Alice ,Bob轮流取,Alice先手,取得规则为至少取一个最多取这一堆总个数的一半。
- 思路:SG函数打表找规律发现,偶数x的sg值为x/2 奇数的sg值为 sg(x/2),由此可以构造出其sg的递归函数
I - Again Stone Game LightOJ - 1296 -SG打表+NIM博弈
最新推荐文章于 2018-11-13 08:08:50 发布