zoukankan      html  css  js  c++  java
  • [博弈]Being a Good Boy in Spring Festival

    Being a Good Boy in Spring Festival

    Description

    下面是一个二人小游戏:桌子上有M堆扑克牌;每堆牌的数量分别为Ni(i=1…M);两人轮流进行;每走一步可以任意选择一堆并取走其中的任意张牌;桌子上的扑克全部取光,则游戏结束;最后一次取牌的人为胜者。
    现在我们不想研究到底先手为胜还是为负,我只想问大家:
    ——“先手的人如果想赢,第一步有几种选择呢?”

    Input

    输入数据包含多个测试用例,每个测试用例占2行,首先一行包含一个整数M(1<M<=100),表示扑克牌的堆数,紧接着一行包含M个整数Ni(1<=Ni<=1000000,i=1…M),分别表示M堆扑克的数量。M为0则表示输入数据的结束。

    output

    如果先手的人能赢,请输出他第一步可行的方案数,否则请输出0,每个实例的输出占一行。

    Examples

    Input

    3 
    5 7 9
    0

    Output

    1

    正确解法:

    所有的a[i]异或(设为ans),如果结果为0,那么必定后手赢

    但是我们要把情况做成特殊情况。这样的话先手才会赢

    如果 a[i]> ans^a[i]  那么只要先手拿走 ans^a[i] ,剩下的就是一个特殊情况。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<string>
     4 #include<cstring>
     5 #include<map>
     6 #include<set>
     7 #include<vector>
     8 #include<queue>
     9 #include<algorithm>
    10 #include<cmath>
    11 using namespace std;
    12 typedef long long ll;
    13 const int inf=0x7fffffff;
    14 const int N=1000000+100;
    15 const int M=9999999;
    16 const ll mod=1000000000+7;
    17 int t,n,a[N];
    18 int main()
    19 {
    20     while(scanf("%d",&n))
    21     {
    22         if(n==0)    break;
    23         int ans=0,cnt=0;
    24         for(int i=1;i<=n;i++)
    25         {
    26             scanf("%d",&a[i]);
    27             ans^=a[i];
    28         }
    29         for(int i=1;i<=n;i++)
    30         {
    31             ans^=a[i];
    32             if(a[i]>ans)
    33                 cnt++;
    34             ans^=a[i];
    35         }
    36         cout<<cnt<<endl;
    37     }
    38 
    39     return 0;
    40 }
    View Code
    No matter how you feel, get up , dress up , show up ,and never give up.
  • 相关阅读:
    线性代数思维导图——3.向量
    微分中值定理的基础题型总结
    构造函数
    Python课程笔记(七)
    0241. Different Ways to Add Parentheses (M)
    0014. Longest Common Prefix (E)
    0013. Roman to Integer (E)
    0011. Container With Most Water (M)
    0010. Regular Expression Matching (H)
    0012. Integer to Roman (M)
  • 原文地址:https://www.cnblogs.com/Kaike/p/10661885.html
Copyright © 2011-2022 走看看