【题解】CF37B:Computer Game

原题传送门
模拟题……
每一秒都选符合要求且攻击力最大的卷轴
没有就算了
但是若是BOSS的生命力只增不减且已没有可用的卷轴,输出NO
Code:

#include <bits/stdc++.h>
#define maxn 1010
using namespace std;
struct data{
	int p, atk;
}a[maxn];
struct node{
	int sec, id;
}print[maxn];
int n, Max, reg, atk, flag[maxn], cnt, ans;

inline int read(){
	int s = 0, w = 1;
	char c = getchar();
	for (; !isdigit(c); c = getchar()) if (c == '-') w = -1;
	for (; isdigit(c); c = getchar()) s = (s << 1) + (s << 3) + (c ^ 48);
	return s * w;
}

int main(){
	n = read(), Max = read(), reg = read();
	for (int i = 1; i <= n; ++i) a[i] = (data){read(), read()};
	int sum = Max;
	while (sum > 0){
		sum = min(Max, sum - atk + reg);
		if (sum <= 0) break;
		if (sum >= Max){
			int b = 0;
			for (int i = 1; i <= n; ++i)
				if (a[i].p >= 100 && !flag[i]){
					b = 1; break;
				}
			if (!b) return puts("NO"), 0;
		}
		int Atk = 0, id = 0;
		for (int i = 1; i <= n; ++i)
			if (!flag[i] && 100 * sum <= a[i].p * Max && a[i].atk > Atk) Atk = a[i].atk, id = i;
		if (id) flag[id] = 1, atk += Atk, print[++cnt] = (node){ans, id};
		++ans;
	}
	puts("YES");
	printf("%d %d\n", ans, cnt);
	for (int i = 1; i <= cnt; ++i) printf("%d %d\n", print[i].sec, print[i].id);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值