zzulioj--1864--炉石传说(模拟)

1864: 炉石传说

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 206   Solved: 62

Submit Status Web Board

Description

最近韬韬周围的小伙伴们都在玩炉石传说, 感觉好厉害的样子, 可是韬韬早都不玩游戏了呢, 自从入坑ACM之后。“不能没有我的蜡烛”, 韬韬天天都能听到这样的句子 - -

   听说炉石传说开放了新冒险模式——探险者协会!开放了一种新的技能:“发现”!

   它的效果是提供三张卡牌(随从卡 / 法术卡), 你可以获得任意一张, 并丢掉另外两张。

   现在你可以使用 n 次“发现”技能, 当然到最后你会得到 n 张卡牌, 如今已经给出每次使用技能后可以选择的三张卡的属性, 韬韬很想知道能否获得至少 a 张随从卡以及 b 张法术卡。

   亲爱的小伙伴你可以帮帮韬韬嘛?

Input

第一行是测试样例数t (1 <= t <= 1000) 每组输入数据的第一行是三个正整数 n, a, b含义见上述 数据范围1 <= n <= 1000 , 1 <= a, b <= n 接下来 n 行, 每行三个数(0或1), 0代表随从卡, 1代表法术卡

Output

对于每组数据, 输出一行 YES 或者 NO

Sample Input

2
1 1 0
1 1 1
3 1 2
0 1 1
0 0 0
1 1 1

Sample Output

NOYES

HINT

对于第一组样例, n=1,a=1, b=0, 使用1次“发现”技能, 至少获得1张随从卡.由于提供的3张都是法术卡(3个1), 所以不能达到要求


   对于第二组样例, n=3,a=1, b=2, 使用3次“发现”技能, 至少获得1张随从卡, 2张法术卡. 那么只要在第一次和第三次选法术卡, 第二次选随从卡即可


如果一行的数据全都是1或者全都是0那么只能取1或者0,当一组数据0跟1都有的时候当做一种中间状态,最后判断中间状态往其他两种状态转换是否可以达到目标
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int a,b,x,y,z,n;
		int na,nb,nc;
		na=nb=nc=0;
		scanf("%d%d%d",&n,&a,&b);
		for(int i=0;i<n;i++)
		{
			scanf("%d%d%d",&x,&y,&z);
			if(x==0&&y==0&&z==0)
				na++;
			else if(x==1&&y==1&&z==1)
				nb++;
			else
				nc++;
		}
		if(a>na)
			nc-=(a-na);
		if(b>nb)
			nc-=(b-nb);
		if(nc<0)
			printf("NO\n");
		else
			printf("YES\n");
	}
	return 0;
}


你可能感兴趣的:(zzulioj--1864--炉石传说(模拟))