zoukankan      html  css  js  c++  java
  • 【牛客7872 D】尼姆博弈

    【牛客7872 D】尼姆博弈

    传送门

    题意

    A和B玩游戏,给n个数,每次能对一个数进行操作,如果一个数是1那么不能对它进行操作。每次操作可以选择这个数x大于1的因子a,把这个数变成x/a。最后无法操作的人输。

    问谁能赢?

    题解

    这是一道比较裸的尼姆博弈题,尼姆博弈是n堆石子,每堆石子有一定数量的石子,每次可以取一堆中一部分石子或者整堆取走,但是不能不取。对应到这道题目里,选择一个>1&&<自身的因此就相当于取走了一部分石子,选择自身这个因子就相当于直接整堆取走。那么每堆石子有多少个呢,答案就是这个数的质因子个数。然后根据尼姆博弈的结论,判断异或和是否为0,若为0则先手必败,反之则先手必胜。

    Code

    /****************************
    * Author : W.A.R            *
    * Date : 2020-10-31-20:53   *
    ****************************/
    /*
    */
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include<queue>
    #include<map>
    #include<unordered_map>
    #include<stack>
    #include<string>
    #include<set>
    #define mem(a,x) memset(a,x,sizeof(a))
    using namespace std;
    typedef long long ll;
    const int maxn=1e6+10;
    const ll mod=1e9+7;
    
    int main(){
    	ll n,ans=0,x;scanf("%lld",&n);
    	for(ll i=1;i<=n;i++){
    		scanf("%lld",&x);
    		ll sum=0;
    		for(ll j=2;j*j<=x;j++)while(x%j==0)x/=j,sum++;
    		if(x>1)sum++;
    		ans^=sum;
    	}
    	if(ans)printf("CC yyds!
    ");
    	else printf("TT txdy!
    ");
    	return 0;
    }
    
  • 相关阅读:
    【LeetCode-树】找树左下角的值
    【LeetCode-贪心】合并区间
    MongoDB3.6版本新增特性
    MongoDB initial sync过程
    MongoDB3.4版本新增特性
    保险配置原则
    MongoDB批量操作时字段为null时没有入库
    Kafka消费者没有收到通知的分析
    Git分支的管理
    NoSQLBooster如何MongoDB的部分文档从一个集合拷贝到另外一个集合中
  • 原文地址:https://www.cnblogs.com/wuanran/p/13907868.html
Copyright © 2011-2022 走看看