博弈论(巴什博弈)
题目:http://www.mangata.ltd/p/P1661
经典的取石子游戏(巴什博弈),题面基本上都是废话,总结一下就是一共n张卡,a,b两人轮流抽,每人每次最多抽k张,a先抽,问谁抽到最后一张。
如果我们把两人各抽一次作为一轮,那么我们不难发现这一轮一共抽了多少张卡是由后抽卡的人决定的。比如一共8张卡,每次最多抽3张,那么a无论是抽1张、2张还是三张,b都可以把这一轮抽的总张数控制为4张。按照这样抽卡的话,一共8张卡,两轮后刚好抽完,那么b就一定抽到最后一张也就是说,当总张数n能够被(k+1)整除时,b抽到最后一张,反之a抽到最后一张。
鉴于巴什博弈已经被玩烂了,我就懒得写更详细的题解了,贴一个别人的吧
代码如下:
#include<iostream> #include<algorithm> using namespace std;int main(){
int t;
int a[1000];
int k,n;
scanf("%d",&t);
for(int i=0;i<t;i++){
scanf("%d %d",&k,&n);
if(n%(k+1))
printf("I'll all twice.\n");
else
printf("I'll all once.\n");
}
return 0;
}