zoukankan      html  css  js  c++  java
  • Lightoj1253(博弈+NIM)

    这题是反nim博弈,和nim类似。
    nim游戏目标:最先把棋子取完的人胜利。
    结论:若a1a2a3...^an=0,则先手必败,否则先手胜利。

    而这一题要求最先把棋子取完的人失败,是反nim游戏
    一个状态为必胜态,当且仅当:
    1.所有堆的石子个数为1,有偶数个堆,即xor和=0;
    2. 至少有一堆石子个数大于1,且xor和!=0
    以上是解决本题需要的结论。

    另外发现了一种nim游戏的变形题,和此题无关:
    n堆石子,每次从不超过k堆中取任意多个石子,最后不能取的人失败。
    结论:把n堆石子的石子数用二进制表示,统计每个二进制位上1的个数,
    若每一位上1的个数mod(k+1)全部为0,则必败,否则必胜

    
    #include "stdio.h"
    int main()
    {
    	int i,j,t,m,n,k,f=1;
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d",&k);
    		int ans=0,flag=1;
    		for (i=0; i<k; i++)
    		{
    			scanf("%d",&n);
    			if (n!=1)
    				flag=0;
    			ans^=n;
    		}
    		printf("Case %d: ",f++);
    		if (flag)//如果所有堆石子个数都是1
    		{
    			if (k%2==1)//堆数为奇数堆,先手必败
    				printf("Bob
    ");
    			else
    				printf("Alice
    "); //偶数堆,xor为0,先手必胜
    		}
    		else//至少有一个堆的石子数大于1
    		{
    			if (ans!=0)//如果xor!=0,先手胜利
    				printf("Alice
    ");
    			else
    				printf("Bob
    ");
    		}
    	}
    
    	return 0;
    }
    
  • 相关阅读:
    postgresql 53300错误
    linux su失败:无法设置用户ID:资源暂时不可用
    shell中使用带密码的方式直接pg_dump和psql
    pg数据库查询表大小
    linux安装postgresql简洁版
    检查linux版本命令
    博客园后台搜索自己的博客
    欧式洗车
    做生意
    无线AP隔离
  • 原文地址:https://www.cnblogs.com/shidianshixuan/p/14460082.html
Copyright © 2011-2022 走看看