zoukankan      html  css  js  c++  java
  • 加法和乘法 题解(博弈)

    题目链接

    题目思路

    官方题解写的很好了,我直接copy

    n=1需要特判(很重要)
    如果n不等于1,可以发现,如果最后一次操作是后手进行,则后手必胜。(奇数+奇数=偶数,偶数乘以任何数都等于偶数)。
    否则如果初始状态有至多一个偶数,先手总有办法把局面变成全部都是奇数然后交给后手,后手至多产生一个偶数,因此给先手时局面不变。在最终时由于最多只有一个偶数,所以先手必胜。
    反之,如果初始状态有至少两个偶数,无论先手怎么操作,后手还给先手的时候一定还有至少两个偶数,所以先手最后面对的局面就是两个偶数,后手必胜。

    代码

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define debug cout<<"I AM HERE"<<endl;
    using namespace std;
    typedef long long ll;
    const int maxn=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
    const int eps=1e-6;
    int n,a[maxn],cnt;
    signed main(){
        cin>>n;
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            if(a[i]%2==0) cnt++;
        }
        if(n==1){
            if(cnt==0){
                cout<<"NiuNiu";
            }else{
                cout<<"NiuMei";
            }
        }else{
            printf(n%2==0&&cnt<2?"NiuNiu":"NiuMei");
        }
        return 0;
    }
    
    
    不摆烂了,写题
  • 相关阅读:
    Hadoop(1.2.1)安装
    ETL,BPM与ESB三者的一些感悟
    编程上面的理论支撑
    TreeSet类的排序
    List接口
    Map接口
    类和对象
    面向对象1
    IO流4
    Java面向对象
  • 原文地址:https://www.cnblogs.com/hunxuewangzi/p/14380320.html
Copyright © 2011-2022 走看看