哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级) I 小乐乐学博弈【大水题】

 

题意概括:

小乐乐和小皮蛋开始学习关于博弈的知识。
给定两堆石子,第一堆有n个石子,第二堆有m个石子。
每次操作可以从一堆石子中拿走一些石子,拿走石子的数量可以是1 - k个,小乐乐先手拿石子,然后依次轮流。
假如到小乐乐的轮次,小乐乐拿不了了(也就是所有的石子都被拿光了),那么小皮蛋就获胜,反之亦然。
假设小乐乐和小皮蛋都绝顶聪明,都会采用最佳的策略,请问最后谁会赢。

输入:

多组数据输入,对于每一组数据,只有一行由空格分开的三个整数n, m, k(0 <= n, m <= 1000000000, k >= |n - m|).

输出:

如果小乐乐会赢,输出"HAI YOU SEI!",否则输出"LAOZI CHUI SI NI!"。

 

解题思路:

因为题目给出了这个条件

k >= |n - m|

所以很明显,只要一开始 N M 都不为 0 ,那么先手就可以把 N M 调整为相等,之后无论后手拿多少个,先手的都可以在另一堆拿相同个,保持两堆相等。

最后肯定是先手获得胜利。

 

AC code:

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <map>
 6 #include <algorithm>
 7 #define INF 0x3f3f3f3f
 8 #define LL long long
 9 using namespace std;
10 
11 int main()
12 {
13     int N, M, K;
14     while(~scanf("%d%d%d", &N, &M, &K)){
15         if(N == 0 && M == 0) puts("LAOZI CHUI SI NI!");
16         else puts("HAI YOU SEI!");
17     }
18     return 0;
19 }

 

posted @ 2018-12-02 09:45  莜莫  阅读(194)  评论(0编辑  收藏  举报