码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1740

时间:2014-06-17 00:18:13      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   http   tar   

这题,通过多次试验,可以发现,当只存在两堆(以下称对)相等的石子时,先手必输。更进一步,当N对这样的石子存在时,先手必输。

于是,若1要赢,一种方法是,把石子都变成相等的对。

考虑石子中无对的情况,若存在对,我们把那些对忽略,因为先手对于这些对是必输的。

当N为奇数时,随机考虑这样的情况(有序)a<b<c<d<e。可知,先手必定能把这些石子变成对。因为e>=(b-a)+(d-c),只需从e中取走若干后把剩余的分配即可。

当N为偶数时,考虑a<b<c<d<e<f。先手同样必胜,因为(f-a)>=(c-b)+(e-d)。

于是,当初始均为对时,先手输,否则先手胜。

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 
 6 const int N=105;
 7 int co[N];
 8 int n;
 9 
10 int main(){
11     int tmp;
12     while(scanf("%d",&n)!=EOF){
13         if(n==0) break;
14         memset(co,0,sizeof(co));
15         for(int i=1;i<=n;i++){
16             scanf("%d",&tmp);
17             co[tmp]=(co[tmp]+1)%2;
18         }
19         int ans=0;
20         for(int i=1;i<=100;i++){
21             if(co[i])
22             ans++;
23         }
24         if(ans) printf("1\n");
25         else printf("0\n");
26     }
27     return 0;
28 }
View Code

 

POJ 1740,布布扣,bubuko.com

POJ 1740

标签:style   class   blog   code   http   tar   

原文地址:http://www.cnblogs.com/jie-dcai/p/3789949.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!