Hearthstone Battlegrounds
题目描述:
注意:本题中描述与真实战棋大不不同。
非常喜欢玩酒馆战棋,他注意到很多情况在后期下只有鱼人才能击败鱼人。所以他想知道如果他和对手都使用鱼人流,他什么时候才能获胜。为了简化该问题,规定现在只有四种鱼人:
- ,带剧毒圣盾亡语;
- ,带剧毒圣盾;
- ,带剧毒亡语;
- ,带剧毒。
(注:
表示
攻击力和
血量)
攻击效果:当一个
的随从攻击一个
的随从(假定两者都没有圣盾和剧毒),则
变为
变为
。当任意一个随从的血量低于1,即视为死亡。
● 剧毒效果:当该随从攻击对方随从,对方被攻击随从立即死亡;
● 圣盾效果:免疫一次任何攻击效果;
● 亡语效果:随从死亡时触发,召唤一个藤蔓;
● 藤蔓:只有
,没有
。
请注意,如果一个有剧毒的随从攻击带有圣盾的随从,带有圣盾的随从不会死,但是它的圣盾会消失。
每回合一个随从都会攻击敌方随从,直至某一方随从数为0。只要
在游戏结束时仍有至少一个随从存活,
获胜(平局不算获胜)。 如果随从随机攻击,则很难预测游戏的结果。 但幸运的是,
的运气非常好,因此,无论可能性有多小,只要有可能获胜,他就可以赢得比赛。
现在他有
个
种鱼人,他的对手有
个
种鱼人。求该玩家能否获胜。若能,则输出“
”,否则输出“
”。
输入描述:
第一行包含一个整数
表示测试用例的数量。
每个测试用例的第一行包含四个整数
,它们表示
最初拥有的各种鱼人的数量。
每个测试用例的第二行包含四个整数
,它们表示
的对手最初拥有的各种鱼人的数量。
所有测试用例的
的总和不超过
输出描述:
打印T行-对于每个测试用例,如果 可以胜出,则打印“ ”,如果 不能胜出,则打印“ ”(不带引号)。
样例输入:
3
1 0 1 0
1 0 1 0
1 0 0 1
0 1 1 0
1 0 0 1
1 0 1 0
样例输出:
Yes
Yes
No
说明:
对于第一个测试用例,假设s1是xtq的第一类鱼人,s2是xtq的第三种鱼人,t1是敌人的第一种鱼人,t2是敌人的第三种鱼人。然后,xtq可以执行以下操作来赢得比赛:
-让s2攻击t2,然后它们都将被摧毁并召唤一个1/1藤蔓,分别称为s3和t3。
-让s3攻击t1,然后t1的神盾将消失,并且s3将被摧毁。
-让s1攻击t1,然后s1的神盾将消失,请注意t1现在没有神盾,因此它将死亡并召唤一个1/1植物,称其为t4。
-让s1攻击t3,然后t3将被销毁。
-让s1攻击t4,然后t4将被销毁。
完成这些操作后,s1仍然在棋盘上,但是xtq的敌人现在没有小兵了,因此xtq可以赢得比赛。
对于第二个测试用例,假设s1是xtq的第一类鱼人,s2是xtq的第四种鱼人,t1是敌人的第二种鱼人,t2是敌人的第三种鱼人。然后,xtq可以执行以下操作来赢得比赛:
-让s1攻击t1,那么它们的神盾将消失。
-让s1攻击t2,然后它们将死亡并召唤一个1/1藤蔓,分别称为s3和t3。
-让s2攻击t3,然后t3将被销毁。
-让s2攻击t1,然后它们都将被销毁。
完成这些操作后,s3仍在棋盘上,但xtq的敌人现在没有随从,因此xtq可以赢得比赛。
对于第三个测试用例,无论小兵如何进攻,xtq都无法赢得比赛。
思路:
贪心。
首先我们发现,这个藤蔓好蒻,攻击力和生命都只有一,而且其他的随从血量都为
…
然后我们发现,这个圣盾太
了,什么都挡得住!但是只有一次机会。
于是我们就想到:用藤蔓去打圣盾…这样稳赚
然后我们发现用剧毒去打圣盾血亏…
所以我们让带亡语的当炮灰,留下藤蔓来破圣盾
随后我们让
满的随从向前冲,使用圣盾并制造藤蔓
由于藤蔓实在是太没用了,所以让藤蔓苟到最后…
反正我们可以操纵局势,只要有赢的可能就行,所以我们只要按照以上策略来写即可
:
这代码又臭又长…
#include<bits/stdc++.h>
using namespace std;
int T,a1,a2,a3,a4,a5,b1,b2,b3,b4,b5,flag;
int main(){
scanf("%d",&T);
while(T--){
a5=b5=0;
scanf("%d%d%d%d",&a1,&a2,&a3,&a4);
scanf("%d%d%d%d",&b1,&b2,&b3,&b4);
flag=0;
while(1){
if(a1+a2+a3+a4==0&&b1+b2+b3+b4==0){
if(a5>b5){flag=1;break;}
else break;
}
else if(a1+a2+a3+a4==0) break;
else if(b1+b2+b3+b4==0){flag=1;break;}
else{
if(a3+a4) b5=0;
if(a5&&(b1+b2)){
if(b1){a5--;b1--;b3++;}
else{a5--;b2--;b4++;}
}
else if(a3){
if(b1+b2){
if(b3){a3--;a5++;b3--;b5++;}
else if (b4){a3--;a5++;b4--;}
else if (b1){a3--;a5++;b1--;b3++;}
else {a3--;a5++;b2--;b4++;}
}
else{
if(b3){a3--;a5++;b3--;b5++;}
else if(b1){a3--;a5++;b1--;b3++;}
else if(b4){a3--;a5++;b4--;}
else{a3--;a5++;b2--;b4++;}
}
}
else if(a1){
if(b1+b2){
if(b3){a1--;a3++;b3--;b5++;}
else if(b4){a1--;a3++;b4--;}
else if(b1){a1--;a3++;b1--;b3++;}
else{a1--;a3++;b2--;b4++;}
}
else{
if (b3) a1--,a3++,b3--,b5++;
else if (b1) a1--,a3++,b1--,b3++;
else if (b4) a1--,a3++,b4--;
else a1--,a3++,b2--,b4++;
}
}
else if(a4){
if(b3){a4--;b3--;b5++;}
else if(b1){a4--;b1--;b3++;}
else if(b4){a4--;b4--;}
else{a4--;b2--;b4++;}
}
else{
if(b3){a2--;a4++;b3--;b5++;}
else if(b1){a2--;a4++;b1--;b3++;}
else if(b4){a2--;a4++;b4--;}
else{a2--;a4++;b2--;b4++;}
}
}
}
if(flag) printf("Yes\n");
else printf("No\n");
}
}