17-比赛1 C - Binary Nim (栈的游戏)

题目描述

Tweedle-Dee 和 Tweedle-Dum 正在进行一场激烈的二进制 Nim 游戏。这是你没有玩过的船
新版本,游戏包含 N 个栈,每个栈只包含 0 和 1 的元素。
就像一般的 Nim 游戏一样,两人轮流行动。玩家在一回合中,必须选择一个非空的栈,然后
从栈顶取出至少一个元素。不过,Tweedle-Dee 只能从栈顶是 0 的栈中取出元素,而 Tweedle-Dum
只能从栈顶是 1 的栈中取出元素。无法行动的玩家落败。
Suzumo 懒得等游戏结束了。给定先手玩家,请求出谁会获胜。别忘了,Tweedle-Dee 和
Tweedle-Dum 都是王者级别的玩家,他们都会采取最优策略。

输入格式

输入的第一行包含一个整数 T,代表测试数据的组数。接下来是 T 组数据。
每组数据的第一行包含一个整数 N 和一个字符串 S,分别代表栈的数量和先手玩家的名称。
接下来 N 行,每行包含一个二进制串 B,代表一个栈。串的第一个字符代表栈顶。

输出格式

对于每组数据,如果 Tweedle-Dee 获胜,则输出一行“Dee”,否则输出一行“Dum”。

数据范围

• 1 ≤ T ≤ 500

• 1 ≤ N ≤ 50

• 1 ≤ |B| ≤ 50

• B 仅包含 0 和 1

• S 只会是“Dee”或者“Dum”

输入

2
2 Dee
101
010
2 Dum
101
010

输出

Dum
Dee

=======================================================================================================================================

比赛时未解决的题目:

学长的题解:

=======================================================================================================================================

代码如下:

 1 # include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 char name[5], Stack[55];
 5 
 6 int main ()
 7 {
 8     int T, n;
 9     scanf("%d", &T);
10     while (T--) {
11         scanf("%d %s", &n, name);
12         int num_0 = 0, num_1 = 0;
13         for (int i = 1; i <= n; ++i) {
14             scanf("%s", Stack);
15             int len = strlen(Stack);
16             for (int j = 0; j < len; ++j) {
17                 if (Stack[j] == Stack[0]) {
18                     if (Stack[0] == '0') ++num_0;
19                     else ++num_1;
20                 }
21             }
22         }
23         if (name[1] == 'e') puts(num_0 > num_1 ? "Dee" : "Dum");
24         else puts(num_1 > num_0 ? "Dum" : "Dee");
25     }
26     return 0;
27 }

 

posted on 2018-07-28 15:36  短发控丶  阅读(188)  评论(0编辑  收藏  举报

导航