zoukankan      html  css  js  c++  java
  • HDU3951 Coin Game

    hdu传送门
    vjudge传送门


    好久没有做博弈论的题了,所以比赛的时候遇到这题基本上就是没思路。


    这题跟nim游戏以及sg函数等博弈论知识没什么关系,但是用到了博弈论的一个经典思路:镜像操作。
    当玩家一拿完后,必然断环成链,而如果玩家二再把这条链分成完全相同的两部分,那么只要完全仿照玩家一的做法,玩家二必然能赢。
    所以只要判断能否分成相等两部分即可:
    1.如果(n leqslant k),那么玩家一赢。
    2.否则当(k > 1)的时候,必然能分成相等的两部分,即玩家二赢。
    3.当(k=1)(n-1)为奇数时,玩家二赢。

    #include<cstdio>
    #include<cctype>
    using namespace std;
    #define In inline
    typedef long long ll;
    In ll read()
    {
    	ll ans = 0;
    	char ch = getchar(), las = ' ';
    	while(!isdigit(ch)) las = ch, ch = getchar();
    	while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
    	if(las == '-') ans = -ans;
    	return ans;
    }
    
    In bool solve(int n, int K)
    {
    	if(n <= K) return 1;
    	if(K > 1) return 0;
    	return n & 1;
    }
    
    int main()
    {
    //	MYFILE();
    	int T = read();
    	for(int i = 1; i <= T; ++i)
    	{
    		int n = read(), K = read();
    		printf("Case %d: %s
    ", i, solve(n, K) ? "first" : "second");
    	}
    	return 0;
    }
    
  • 相关阅读:
    由数字三角形问题理解动态规划
    堆排序
    清理oracle数据库空间
    十个常用破解网络密码的方法
    说说windows下64位程序和32位程序
    sql server使用第二记
    手机通讯录PK
    sql server 初级实践记
    You and your research ( Richard Hamming) P5
    TED
  • 原文地址:https://www.cnblogs.com/mrclr/p/14193953.html
Copyright © 2011-2022 走看看