zoukankan      html  css  js  c++  java
  • poj 1740

    题意:Alice和Bob一起玩游戏,给定几个堆得石子,A和B分别拿一个堆中任意石子可放到其他石子数不为0的堆中

    不能移动的人输,Alice为先手,若他赢输出1否则输出0;

    题解:若有1堆石子则A必胜

    若2堆石子个数相同,则无论先手怎么取,后手可取相同的将石子数还原

           不同,则先手可将两堆石子变相等,此时面对石子数相等的人必败

    可得出结论  奇数堆A必胜,偶数堆时若石子数都是一对一对的则先手必败否则先手胜

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    int a[110],temp[110];
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF&&n)
        {
            memset(temp,0,sizeof(temp));
            for(int i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
                temp[a[i]]++;
            }
            if(n%2)//奇数堆先手必胜 
            {
                cout<<"1"<<endl;
                continue;
            }
            int ans=0;
            for(int i=0;i<105;i++)
            {
                if(temp[i]%2)//检查石子数是否都是两两相等的 
                    ans++;
            }
            if(ans==0)//若是先手必败 
                cout<<"0"<<endl;
            else
                cout<<"1"<<endl;
                
        }
    }
  • 相关阅读:
    2-SAT( tarjan应用 )
    字节流和字符流
    linux 安装kafka
    网络编程入门
    Java代码中的魔法值
    动态SQL
    update语句的返回值是什么
    dual表
    diy diy diy台式机走起
    js数组赋值,改变其中一个,另一个数组也会改变(vue中数据绑定)
  • 原文地址:https://www.cnblogs.com/renwjing/p/7375588.html
Copyright © 2011-2022 走看看