HDU4387 Stone Game

原创 2015年07月09日 18:58:04

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4387

                                                        Stone Game


Problem Description

  Alice and Bob are playing a game. It is played in 1*N grids. Each grid can be occupied by one stone. Alice has K white stones on the left (numbered 1 to K from left to right), and Bob has K black stones on the right (numbered 1 to K from right to left). They take turns to move their own stones, and Alice moves first. In each move, the player must choose one stone to move to the nearest empty grid forward (Alice moves to the right, Bob moves to the left). If one player cannot find any stone to move, he wins.
  Now Alice asks you to find a winning strategy of the game. Can you help him?


 

Input

  There are multiple test cases. In each case, there is one line containing two integers N, K.

Technical Specification
  3 <= N <= 1,000,000, 1 < K*2 < N
 

Output

  For each case, print in one line containing the case number (starting with 1) and the winning information. If Alice loses, just print “Bob”, otherwise print “Alice” and the first stone he chooses. If there are multiple stones he can choose, he will choose the rightmost one.
 

Sample Input
3 1 4 1
 

Sample Output
Case 1: Bob Case 2: Alice 1
 
题意:
  AB两个人玩游戏,给出n,d,n代表格子数,d代表AB各拥有的棋子数,A只能往右移动,B只能往左移动,而且AB只能移动到最靠近自己的第一个空上,A先移动,若谁先移动到不能移动为止谁就获胜,如果A赢了,输出他第一颗移动的棋子;

题解:
   移动到不能移动为止,即最终状态,A都在右边,B都在左边。分类讨论:
  1、d=1,即AB都只有一颗棋子,若n为偶数,A赢,若n为奇数,B赢;
  2、d>1,此时的原则是谁在中间n-2d的空中占的棋子数多谁就赢,因为A先走,所以不管奇数还是偶数个空,都是A赢
    只要讨论A走的第一颗棋子就行了:
                           (n-2d)=1,A移动d位子上的棋子为最优方案;
                           否则,A移动第一颗棋子为最优方案;

代码如下:
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
    int n,d,k=1;
    while(~scanf("%d%d",&n,&d))
    {
    	if(d==1 && n%2!=0) printf("Case %d: Bob\n",k++);
    	else
	    {
	                int kk=n-2*d;
			if(kk==1)printf("Case %d: Alice %d\n",k++,d);
			else printf("Case %d: Alice 1\n",k++);	
	    }
    }
    return 0;
}
























版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

博弈_______Stone Game(hdu 4387)

Stone Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total...

hdu2999 Stone Game, Why are you always there?---sg 一排石子分成若干堆

Stone Game, Why are you always there? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768...

解题报告:HDU1729 Stone Game SG博弈

Stone Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total...

HDU_2580 A simple stone game

刚开始看这一题时,就知道这根本不是一道简单题(对没学K倍

【hdu 2486】A simple stone game

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio...

HDU 2999 Stone Game, Why are you always there? (构造 SG函数)

转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove 题目:给出一串石头,和...

HDU 1729 Stone Game(博弈 + SG函数)

传送门Stone GameTime Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota...

HDU A simple stone game [K倍动态减法游戏]

转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove 神牛曹钦翔的论文:...

sg函数+数学_________Stone game( hdu 5865 2016多校第十场 )

Problem Description Birdstorm and hahaha are playing a game. Given a DAG (Directed acyclic graph) w...

HDU 1729 Stone Game

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1729 题意:一个组合博弈论的游戏,有n个盒子,每个盒子有一个容量上限,且每一个盒子里都有一定...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)