HDU 1850 Being a Good Boy in Spring Festival【Nimゲーム】

2038 ワード

Being a Good Boy in Spring Festival
Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4893    Accepted Submission(s): 2929
Problem Description
1年間外国にいる両親はいつも心配している.
春節に家に帰って何日いい子になれるの?
冬休みに次のことをやってみよう
母に付き添って料理場をぶらぶらする
こっそりお父さんにプレゼントを買ってあげます.
積極的に茶碗を洗うように強く要求する
ある日早起きして両親に心を込めて朝食を作ってあげました
もしよろしければ、お父さんとお母さんに言ってもいいです.
游びましょうACM授业に通っていますね~
次は二人の小さなゲームです.机の上にM山のトランプがあります.各スタックの数はそれぞれNi(i=1...M)である.二人は交代で行う.一歩歩くたびに任意に山を選んで、その中の任意のカードを取り出すことができます.テーブルの上のトランプが全部取れば、ゲームは終わります.最後にカードを取った人は勝者だ.
先手が勝つか負けるかを研究したくないので、皆さんに聞きたいだけです.
——「先手の人が勝ちたいなら、第一歩は何種類の選択肢がありますか?」
 
Input
入力データは複数の試験用例を含み、各試験用例は2行を占め、まず1行に1つの整数M(1 
Output
先手の人が勝つことができる場合は、最初のステップで実行可能なシナリオ数を出力してください.そうしないと、0を出力してください.各インスタンスの出力は1行を占めます.
 
Sample Input

   
   
   
   
3 5 7 9 0

 
Sample Output

   
   
   
   
1

 /*
/*
問題:
   古典的なNimゲームの問題は、a b cの3つの山があれば、a^b^c=0の時に奇異な情勢を満たし、c=a^bを得る. 
*/ 
#include<cstdio>
int main()
{
    int n,a[1010];
    while(scanf("%d",&n)&&n)
    {
        int s=0;
        for(int i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
            s^=a[i];
        }
        int sum=0;
        for(int i=0; i<n; i++)
        {
            if((s^a[i])<a[i])// a[i]          ,   a[i]           
            {
                sum++;
            }
        }
        printf("%d
",sum); } return 0; }