正文索引 [隐藏]

传送门

题目大意

现在有四种随从:

  • 圣盾亡语
  • 圣盾
  • 亡语
  • 白板

如果对方随从没有免疫,以上随从都能做到一击必杀。

词缀的效果如下:

  • 圣盾:免疫一次伤害,免疫后圣盾消失。
  • 亡语:死亡时召唤一只1/1的藤蔓。

每回合只能发动一次攻击,游戏结束时你还有随从存活就算你获胜。你很会玩,所以你一定能找到制胜策略,哪怕只有一点可能。

给你双方随从信息,请告诉我你能否获胜。

思路

贪心处理。

  1. 藤蔓没法拿来解场,只能破圣盾,因为每个随从的血量都是1e9。
  2. 没有藤蔓时只能硬解,为了亏得少一些,优先用有亡语的随从解。
  3. 上述条件都满足不了了,用圣盾亡语的随从。
#include <bits/stdc++.h>

using namespace std;

int t;
int a[5], b[5];

void battle()
{
	if(b[3])
	{
		b[3]--;
		b[5]++;
	}
	else
		if(b[4]) b[4]--;
		else
			if(b[1])
			{
				b[1]--;
				b[3]++;
			}
			else
			{
				b[2]--;
				b[4]++;
			}
}

int main()
{
	cin >> t;
	while(t--)
	{
		scanf("%d%d%d%d", &a[1], &a[2], &a[3], &a[4]);
		scanf("%d%d%d%d", &b[1], &b[2], &b[3], &b[4]);
		
		while(a[1]+a[2]+a[3]+a[4] && b[1]+b[2]+b[3]+b[4])
		{
			if(a[3]+a[4]) 
				b[5] = 0;
            if(a[5] && b[1]+b[2])
            {
                if(b[1]) 
                {
                	b[1]--;
					b[3]++;
                }
                else
				{
					b[2]--;
					b[4]++;
				} 
                a[5] = 0;
            }
            if(a[3]) 
			{
            	a[3]--;
				a[5]++;
            }
            else 
				if(a[1]) 
				{
					a[1]--;
					a[3]++;
				}
            	else 
					if(a[2]) 
					{
						a[2]--;
						a[4]++;
					}
            		else a[4]--;
            battle();
		}
		
		if(b[1]+b[2]+b[3]+b[4] || !(a[1]+a[2]+a[3]+a[4]) && a[5]<=b[5]) puts("No");
        else puts("Yes");
	}
	
	return 0;
}