BJUTACM 1102:分糖啦

这个题是最基础的巴什博弈问题

举个例子,如果有50块糖,每次最多拿10块,最少拿1块,这样只要先手取6块糖,则先手必胜,因为之后只要每次对方取M([1,10])块糖,他只需要取(10+1)- M块糖即可,这样对方必定无糖可拿

推广到一般规律,如果一共有X块糖,每次拿糖块数区间处在[1,Y] 这样如果先手能一次拿到(Y+1)*n 块糖的状况则必胜,所以要判断x减去 1到Y 这些数 能否达到这种情况

在数学条件下进行推导,假设Y = 10,   则其中(Y+1)*n 所包含的数字有,11,22,33…… 所以如果一开始不是这些数,先手必定能拿到这些数 于是先手获胜,于是如果起始数不是Y+1 的 n倍,先手必胜 否则,后手必胜

Y为任意数时也可推导出以上结论

题目链接

#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>
#include <cstdlib>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
//假设一共50块糖  规定每次最多拿10个 
//第一次拿走6块 之后每次拿走10-对方拿走的数量 便可以保证自己拿完
//谁先拿完谁就胜利转换为 谁先拿到(10+1) 的n倍  谁就胜利了 
//也就意味着 谁从10+1 的n倍开始拿 谁就输了 
int main(int argc, char** argv) {
	int p;
	scanf("%d",&p);
	for(int i=0;i<p;i++)
	{
		int n,m;
		char temp[10]; 
		scanf("%d%d",&n,&m);
		scanf("%s",temp);
		if(n<=m)
		{
			printf("%s\n",temp);
			continue;
		}
		else if(n>m)
		{
			if(n%(m+1)==0&&strcmp(temp,"Cw")==0)
			{
				printf("ACSync\n");
				continue;
			}
			if(n%(m+1)==0&&strcmp(temp,"ACSync")==0)
			{
				printf("Cw\n");
				continue;
			}
			if(n%(m+1)!=0)//数学条件下的优化 
			{
				printf("%s\n",temp);
				continue;
			 } 
			 
			//如果不是正好的条件下 能否一次拿到m+1的 x倍 
//			int flag = 1;//这里为什么是一次 可以说是一个玄学问题 
//			for(int i=1;i<=m;i++)
//			{
//				if((n-i)%(m+1)==0)
//				{
//					flag = 0;//能拿到				
//					break;
//				}
//			}
//				if(flag==0)
//				{
//					printf("%s\n",temp);
//				}
//				if(n%(m+1)==0&&strcmp(temp,"Cw")==0)
//				{
//					printf("ACSync\n");
//					continue;
//				}
//				if(n%(m+1)==0&&strcmp(temp,"ACSync")==0)
//				{
//					printf("Cw\n");
//					continue;
//				} 
//			
		 } 
	//	printf("%s",temp);
	} 
	//17  (3 -> 4)
	//system("pause");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值