原题传送门
模拟题……
每一秒都选符合要求且攻击力最大的卷轴
没有就算了
但是若是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;
}