• POJ 1740


    这题,通过多次试验,可以发现,当只存在两堆(以下称对)相等的石子时,先手必输。更进一步,当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)。

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

     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
    ");
    25         else printf("0
    ");
    26     }
    27     return 0;
    28 }
    View Code
  • 相关阅读:
    歌德巴赫猜想
    Dice Possibility
    ACboy needs your help(简单DP)
    Bag of mice(概率DP)
    合唱队形(LIS)
    地震预测(模拟链表)
    关于KMP算法的感想
    Card Collector
    LOOPS
    Aeroplane chess(简单概率dp)
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/3789949.html
Copyright © 2020-2023  润新知