有N堆石子,每次可以从任意堆拿出任意个,然后可以从拿出的任意个中间选出一些放到其他任意堆中间。这个题目的关键:是否能找到成对的堆。
如果所以堆都成对,那么先手输,
如果不成对,先手赢,先手可以通过一次性把所有的堆变成对。
代码如下:
Source Code
Problem: 1740 | User: Cathy11 | |
Memory: 172K | Time: 0MS | |
Language: C++ | Result: Accepted |
- Source Code
#include<algorithm> #include<iostream> #include<stdio.h> int main() { int pile[12]; bool tag[12]; int n,i,j; while(scanf("%d",&n)==1&&n) { bool ans=0; for(i=0;i<n;i++) scanf("%d",&pile[i]); memset(tag,0,sizeof(tag)); if(n==1) ans=1; else { for(i=0;i<n;i++) if(!tag[i]) { for(j=i+1;j<n;j++) if(!tag[j]&&pile[i]==pile[j]) { tag[i]=1; tag[j]=1; break; } if(j==n) { ans=1; break; } } } printf("%d/n",ans); } return 0; }