「MXOI Round 2」游戏
题目描述
小 C 和小 D 正在玩一款蒸蒸日上的游戏。
这款游戏共有 3 3 3 种手牌:杀、闪、斩。他们的用途分别如下:
-
杀:对对方使用,对方需要使用一张闪 ,否则对方输掉游戏;或 回应对方的斩;
-
闪:回应对方的杀;
-
斩:对对方使用,对方需要使用一张杀,否则对方输掉游戏。
玩家在每使用一张牌后,都需要弃掉该使用的牌。
从小 C 开始,每个回合依次属于小 C 和小 D。在玩家的回合内,该玩家可以出任意 张杀 和斩,对方需要做出对应的回应。当然,玩家也可以不出牌,直接进入对方的回合。
现在,小 C 共有 c 1 c_1 c1 张杀、 c 2 c_2 c2 张闪、 c 3 c_3 c3 张斩,小 D 共有 d 1 d_1 d1 张杀、 d 2 d_2 d2 张闪、 d 3 d_3 d3 张斩,双方都知道对方的手牌。你需要求出,双方在都进行最优策略的情况下,游戏的结果会如何。
输入格式
本题有多组测试数据。
第一行输入一个整数 T T T,表示测试数据组数。
接下来依次输入每组测试数据,对于每组测试数据,输入一行六个整数 c 1 , c 2 , c 3 , d 1 , d 2 , d 3 c_1,c_2,c_3,d_1,d_2,d_3 c1,c2,c3,d1,d2,d3。
输出格式
对于每组测试数据,输出一行:
-
若双方在都进行最优策略的情况下,小 C 可以获胜,则输出
C
; -
若双方在都进行最优策略的情况下,小 D 可以获胜,则输出
D
; -
若双方在都进行最优策略的情况下,游戏会平局,即谁也无法获胜,则输出
E
。
样例 #1
样例输入 #1
3
3 1 4 1 5 9
1 1 4 5 1 4
5 2 1 2 6 3
样例输出 #1
C
D
E
提示
【样例解释 #1】
对于第一组数据,小 C 可以先出一张斩,并在小 D 回应一张杀后再出一张斩。此时小 D 的杀用完了,无法做出回应,输掉了游戏。
【样例 #2】
见附加文件中的 game/game2.in
与 game/game2.ans
。
【数据范围】
对于 100 % 100\% 100% 的数据, 1 ≤ T ≤ 1 0 5 1 \le T \le 10^5 1≤T≤105, 0 ≤ c 1 , c 2 , c 3 , d 1 , d 2 , d 3 ≤ 1 0 9 0 \le c_1,c_2,c_3,d_1,d_2,d_3 \le 10^9 0≤c1,c2,c3,d1,d2,d3≤109。
测试点编号 | 特殊性质 |
---|---|
1 ∼ 3 1\sim3 1∼3 | 保证 c 3 = d 3 = 0 c_3=d_3=0 c3=d3=0 |
4 ∼ 6 4\sim6 4∼6 | 保证 c 1 = d 2 c_1=d_2 c1=d2 且 c 2 = d 1 c_2=d_1 c2=d1 |
7 ∼ 10 7\sim10 7∼10 | 无 |
cpp
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int t, c1, c2, c3, d1, d2, d3;
int main()
{
cin >> t;
while (t--)
{
cin >> c1 >> c2 >> c3 >> d1 >> d2 >> d3;
if (c1 > d2 || c3 > d1) cout << "C" << endl;
//先手的杀大于后手的闪或者先手的斩大于后手的杀
else if ((d1-c3> c2 || d3 > c1)) cout << "D" << endl;
//注意后手的杀可能会被斩耗掉一些所以有d1-c3
else cout << "E" << endl;
}
return 0;
}