取石子(一)
来源:互联网 发布:梦幻辅助软件 编辑:程序博客网 时间:2024/05/08 12:26
取石子(一)
时间限制:3000 ms | 内存限制:65535 KB
难度:2
- 描述
- 一天,TT在寝室闲着无聊,和同寝的人玩起了取石子游戏,而由于条件有限,他/她们是用旺仔小馒头当作石子。游戏的规则是这样的。设有一堆石子,数量为N(1<=N<=1000000),两个人轮番取出其中的若干个,每次最多取M个(1<=M<=1000000),最先把石子取完者胜利。我们知道,TT和他/她的室友都十分的聪明,那么如果是TT先取,他/她会取得游戏的胜利么?
- 输入
- 第一行是一个正整数n表示有n组测试数据
输入有不到1000组数据,每组数据一行,有两个数N和M,之间用空格分隔。 - 输出
- 对于每组数据,输出一行。如果先取的TT可以赢得游戏,则输出“Win”,否则输出“Lose”(引号不用输出)
- 样例输入
21000 11 100
- 样例输出
LoseWin
- 来源
- 经典题目
- 上传者
- 张云聪思路:巴什博奕,总数为n,每次最大取值为m,利用公式n = k * (1 + m) + r (0 <= r <= m), 如果 r != 0, 那么先手必赢!策略如下:当 r != 0 时: 首先先手报r个,那么剩下k倍(1+m)个数,那么我们每次报数1+m-k(B)个数就一定能保证最后剩下1+m个,此时,无论后手报几个,都会输!当 r = 0 时, 与上面相反,后手一定会赢!代码:
- #include <iostream>
- using namespace std;
- int main()
- {
- int k;
- cin >> k;
- while(k --){
- int n, m;
- cin >> n >> m;
- if(n % (m + 1) == 0)
- cout << "Lose" << endl;
- else
- cout << "Win" << endl;
- }
- return 0;
- }
0 0
- 取石子(一)
- 取石子(一)
- 取石子(一)
- 取石子(一)
- 取石子(一)
- 取石子(一)
- 取石子(一)
- 取石子(一)
- 取石子(一)
- 取石子(一)
- 【23 取石子(一)】
- acm-取石子(一)
- NYOJ_23取石子(一)
- 23 取石子(一)
- NYOJ-取石子(一)
- nyoj23取石子(一)
- 博弈论 取石子(一)
- NYOJ-取石子(一)
- POJ 2646 The Trip
- 可怕的阶乘
- Light OJ 1004
- 判断两台计算机IP地址是同一子网络 华为OJ训练平台---转载
- 用InstallAnywhere工具打包J2EE程序为.exe文件
- 取石子(一)
- spring学习之@SessionAttributes
- 求M的N次方的最后三位 转载
- hdu 1503:Advanced Fruits(动态规划+路径输出)
- shell数组排序、二分查找
- leetcode: Remove Duplicates from Sorted List II
- 【web开发学习笔记】Structs2 Result学习笔记(三)带参数的结果集
- 文件操作函数feof判断是否指向文件的结尾处,结尾即为空字符
- 删除重复字符串-转载