Incinerate

目录

题目

输入输入的第一行包含一个整数t(1≤t≤100)--测试案例的数量。测试用例的描述如下。

输出 对于每个测试案例,打印答案--如果Genos可以杀死所有的怪物,则打印 "YES"(不带引号),否则打印 "NO"。

代码:


题目

为了消灭人类,怪物协会派了n个怪物到地球表面。第i个怪物的健康状况是hi,力量是pi。

通过他最后的攻击手段--真气螺旋焚烧炮,吉诺斯可以对所有活着的怪物造成k的伤害。换句话说,吉诺斯可以通过一次攻击使所有怪物的健康状况减少k(如果k>0)。

然而,在吉诺斯的每次攻击之后,怪物们都会前进。在它们的共同努力下,它们将Genos的攻击伤害减少到†最弱的怪物‡活的力量。换句话说,每次攻击后,所有当前活着的怪物中的最小π会从k的值中减去。

†最弱的怪物是力量最小的怪物。

‡如果一个怪物的健康状况严格大于0,它就是活着的。

基诺斯是否能成功杀死所有的怪物?

输入
输入的第一行包含一个整数t(1≤t≤100)--测试案例的数量。测试用例的描述如下。

每个测试案例的第一行包含两个整数,n和k(1≤n,k≤105)--怪物的数量和Genos的初始攻击伤害。然后是两行,每行包含n个整数,描述数组h和p(1≤hi,pi≤109)。

保证所有测试案例的n之和不超过2⋅105。

输出 
对于每个测试案例,打印答案--如果Genos可以杀死所有的怪物,则打印 "YES"(不带引号),否则打印 "NO"。

样例输入

3
6 7
18 5 13 9 10 1
2 7 2 1 2 6
3 4
5 5 5
4 4 4
3 2
2 1 3
1 1 1

样例输出

YES
NO
YES

对于这道题呢,题目的意思很简单,就是看能否去杀死全部怪物,由于怪物有两个值,所以这里推荐结构体,然后进行排序。最后就是对每一只怪物进行遍历即可。

友情提示:不要每次从0开始遍历,否则会t的哦

代码:

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5+10;
struct llk {
	int a,b;
};
bool cmp(llk x,llk y){
	return x.b<y.b;
}
int main() {
	llk q[N];
	int t;
	cin >> t;
	int n, m;
	while (t--) {
		scanf("%d%d", &n, &m);
		for (int i = 0; i < n; i++) {
			scanf("%d", &q[i].a);
		}
		for (int i = 0; i < n; i++) {
			scanf("%d", &q[i].b);
		}
		sort(q,q+n,cmp);
		long long sum=m;
		for(int i=0;i<n;i++){
			q[i].a-=sum;
			while(q[i].a>0&&m>0){
				m-=q[i].b;
				q[i].a-=m;
				sum+=m;
			}
			if(m<=0){
				break;
			}
		}
		if (q[n-1].a<=0)cout << "YES" << endl;
		else cout << "NO" << endl;
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值