Bash 游戏
有一堆石子共有N个。A B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。
假设A B都非常聪明,拿石子的过程中不会出现失误。给出N和K,问最后谁能赢得比赛。
基础:1 , 2, ..., m是必赢局面, m+1是必输局面
递推:m+2,m+3, ... ,2m+1是必赢局面,2m+2是必输局面
...
k(m+1)是必输局面,应该允许k=0,因为0显然也是必输局面
在必输局和必赢局中,赢的一方的策略是: 拿掉部分物品,使对方面临k(m+1)的局面
例如上例中10个物品,只能拿1到5个,先手方拿4个即可,对手无论拿多少个,你下次总能拿完
从另一个角度思考这个问题,如果物品数量随机,那么先手一方胜利的概率是m/(m+1),后手方胜利的概率是1/(m+1)
1 #include <ctype.h> 2 #include <cstdio> 3 4 int n,x,y; 5 6 inline void read(int&x) { 7 register char c=getchar(); 8 for(x=0;!isdigit(c);c=getchar()); 9 for(;isdigit(c);x=x*10+c-48,c=getchar()); 10 } 11 12 int hh() { 13 read(n); 14 while(n--) { 15 read(x);read(y); 16 if(x%(y+1)==0) printf("B\n"); 17 else printf("A\n"); 18 } 19 return 0; 20 } 21 22 int sb=hh(); 23 int main() {;}