zoukankan      html  css  js  c++  java
  • Codeforces 549C The Game Of Parity【博弈】

    C语言纠错大赛的一道题,正好拿来补博弈~~
    给的代码写的略奇葩。。不过还是直接在上面改了。。


    题目链接:

    http://codeforces.com/problemset/problem/549/C

    题意:

    给你n个数,两个人依次拿走一个数,最后剩下的k个数的和若为奇数,则先手赢,否则后手赢。问谁赢?

    分析:

    看最后依次操作:此时有k+1个数。。。
    最后一次操作是先手,则

    • 剩下的全为偶数,先手必输
    • 剩下的全为奇数且数字个数为偶数,拿走一个后,先手赢,否则后手赢。
    • 剩下的数有奇有偶,则先手在奇数偶数中随便选一个必可以使最后和为奇数,先手赢。

    最后一次操作是后手,则

    • 情况与先手正好相反,但是注意有奇有偶的情况,后手肯定有办法使得剩下的和为偶数,所以还是后手赢。
    • 就只有剩下的全为奇数且个数也为偶数的时候,后手才会输。。。

    代码:

    #include<algorithm>
    #include<cstdio>
    using namespace std;
    int n1,n2,n,k,even,odd,i,c,f;
    int Solve(){
      if (n==k) return odd % 2;
      if (n1>n2){//s
        if (n2>=odd) return 0;
        if (n2<even) return 1;
        return  k % 2;//修改的部分
      }
      else{
        if (n1>=even) return k % 2;//修改的部分
        return 0;
      }
    }
    int main(){
      while (scanf("%d%d",&n,&k)==2){
        odd=0;
        even=0;
        n1=(n-k+1)/2;
        n2=(n-k)/2;
        for (i=1;i<=n;i++){
          scanf("%d",&c);
          if (c % 2) odd++;
          else even++;
        }
        f=Solve();
        if (f) printf("Stannis
    ");
        else printf("Daenerys
    ");
      }
      return 0;
    }
    
  • 相关阅读:
    用C语言画个简单表格
    魔方阵 奇数偶数都成立
    HDU 1527 取石子游戏
    HDU 2669 Romantic
    21位花朵数(详解)
    博弈论总结(1)
    qsort排序(即快排)
    POJ 1061 青蛙的约会
    HDU 2176 取(m堆)石子游戏
    HDU1061 求n^n的最低位
  • 原文地址:https://www.cnblogs.com/Tuesdayzz/p/5758686.html
Copyright © 2011-2022 走看看