CodeChef - CLPERM (一道感觉是直觉的规律题)

CodeChef - CLPERM

https://www.codechef.com/problems/CLPERM 

这一题就是一个很有趣的博弈规律题,大概题意就是1-n个数字,其中缺失了一些数字,可以得出一个很奇怪的定理,只要当前缺的数等于前面所有数加起来减去前面缺的数,如果大与等于则是这个数字,其余情况就是这个缺的数字不能构成,然后就是判断奇偶性决定最后的结果

#include<bits/stdc++.h>

using namespace std;
const int maxn = 2e6;
typedef long long ll;
ll v[maxn];

const ll mod = 1e9;
int main()
{
        int t;
        cin>>t;
        while(t--){
            int n,k;
            scanf("%d%d",&n,&k);
            ll sum=0;
            ll res=-1;
            for(int i=1;i<=k;i++){
                scanf("%d",&v[i]);
            }
            sort(v+1,v+1+k);
            for(int i=1;i<=k;i++){
                sum+=v[i];
                ll t= 1ll *v[i] * (v[i]+1)/2-sum;//等差数列
                if(v[i]>t){
                    res=t;
                    break;
                }
            }
            if(res==-1)
                res=1ll*n*(n+1)/2-sum;
            if(res&1)cout<<"Mom"<<endl;
            else cout<<"Chef"<<endl;
        }
}

猜你喜欢

转载自blog.csdn.net/qq_42193011/article/details/86378703