首页 > 代码库 > HDU1846 巴什博奕
HDU1846 巴什博奕
巴什博弈:
一个人拿1~m个,那谁面对m+1的局势的的时候则必败。假设n=k*(m+1)+s,(k为任意,s<m+1),那我(先手)先把那个s个拿掉,然后让另一个人拿,从现在开始,只要我每次拿的个数与前面一个人拿的个数和等于m+1,这样后拿的必定面对必败局势,即到最后另一个人拿完后肯定是剩t(t<m)个给我,那就是我赢。
比如23 2,23=(3×7)+2;那我第一次拿掉2,然后无论每次另外一个人拿多少我都可以使得这轮总共拿3,然后他必定会面对3这个局势,然后我就必胜,那什么时候必败呢,很明显如果我面对的是(m+1)的倍数的局势就必败。即我们只需要判断n%(m+1)是否等于0即可知道谁胜谁负。
1 #include<cstdio> 2 int main() 3 { 4 int t, n, m; 5 scanf("%d", &t); 6 while (t--){ 7 scanf("%d%d", &n, &m); 8 if (n <= m) 9 printf("first\n");10 else if (n % (m + 1) == 0)11 printf("second\n");12 else13 printf("first\n");14 }15 return 0;16 }
HDU1846 巴什博奕
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。