这类题遇到第二次了
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 1e5+5;
struct node{
ll v;
ll att;
}mon[maxn];
bool cmp(node x, node y)
{
return x.att > y.att;
}
int main()
{
ll n, k, c;
scanf("%lld %lld %lld",&n,&k,&c);
for (int i=1;i<=n;i++)
scanf("%lld%lld",&mon[i].v, &mon[i].att);
sort(mon+1, mon+1+n,cmp); // 攻击力降序
ll ans = 0;
for(int i=1;i<=n;i++){
if(k<mon[i].v) // 如果攻击力小于血量,吃果子
{
if(c >= (mon[i].v-1) / k) //打败一只需要这么多的果子(如果果子还够,注意这里是(v-1)/k, 因为默认己方先手
{
c -= (mon[i].v-1) / k;
}
else //果子不够了
{
ans += mon[i].att * ((mon[i].v-1-c*k) / k); // 怪兽打自己的攻击力*打自己次数,注意有果子就吃
c = 0;
}
}
}
printf("%lld\n",ans);
return 0;
}