zoukankan      html  css  js  c++  java
  • 【POJ 1740】A New Stone Game

    这真是一道博弈论的好题啊

    还是采用OI届的惯用套路,从简单想起


    如果只有一堆石子,那么一定先手必胜

    如果有两堆石子,那么我们考虑如下两种情况

    2.1 两堆石子数量相同,那么无论先手怎么拿,后手都有一种与之对应的方法使两堆重新变得数量相同,直至最后石子被拿完,先手必败

    2.2 两堆石子数量不同,那么先手一定有一种策略,可以使两堆石子数量相同,此时状态回归到2.1,后手变成了当前状态的先手,先手必胜

    如果有三堆石子呢?

    我们一定有一种策略,将三堆石子变为两堆相同的石子,这个稍微理解一下或者手玩一下就可以知道,然后状态又回到了2.1,后手变成了当前状态的先手,先手必胜

    如果有四堆石子呢?

    我们可以将其拆分成2.1 2.2的情况的组合,总结出结论:

    如果有偶数堆石子,若每一个石子堆的数目都为偶数,那么先手必败,否则先手必胜

    同样,我们可以得到

    若有奇数堆石子,那么先手必胜,(用一次操作变成偶数堆两两对应)

    然后这个题就是个大水题辣~

    贴代码

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    int q[101],num[200];
    int main()
    {
    	int n;
    	while(scanf("%d",&n)!=EOF&&n)
    	{
    		memset(num,0,sizeof num);
    		for(int i=1;i<=n;++i)
    			scanf("%d",&q[i]),++num[q[i]];
    		if(n%2)
    			puts("1");
    		else
    		{
    			int flag=1;
    			for(int i=1;i<=100;++i)
    				if(num[i]%2) flag=0;
    			if(flag)
    				puts("0");
    			else puts("1");
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    快速排序 C语言实现
    怎样认识女孩?
    看了你就想结婚!)
    C语言面试题大汇总
    VC6.0下载地址
    STL vector 容器介绍
    Beauty of Maths! Amazing!
    自我参考:Java学习的30个目标
    Beauty of Maths! Amazing!
    采用 Java 持久化框架:选择、时机和优缺点?
  • 原文地址:https://www.cnblogs.com/HenryHuang-Never-Settle/p/10638318.html
Copyright © 2011-2022 走看看