思路:一个切分巧克力的游戏,找到必败点,从而找到规律即可,这里的两个刀手都尽可能的将其分为n*1和1*m的形式从而为自己增加切刀数。一旦先出现n*1种情况就为alice增加n-1次刀数,而出现1*m情况就会给BOb增加m-1次刀数。
AC代码:
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
for(int k=1;k<=T;++k)
{
int n;
scanf("%d",&n);
__int64 a=0,b=0;
for(int i=0;i!=n;++i)
{
__int64 x,y;
scanf("%I64d%I64d",&x,&y);
while(1)
{
if(x==1)
{
b+=y-1;
break;
}
if(y==1)
{
a+=x-1;
break;
}
x=x>>1;
y=y>>1;
}
}
if(a>b) printf("Case %d: Alice\n",k);
else printf("Case %d: Bob\n",k);
}return 0;
}

本文介绍了一种切分巧克力的游戏策略,通过将巧克力分为n*1或1*m的形式来增加切刀数。当出现n*1的情况时为Alice增加n-1次切刀数,而1*m则为Bob增加m-1次切刀数。最终根据双方的切刀数判断胜者。
1868

被折叠的 条评论
为什么被折叠?



