AcWing 5980. 训练士兵
原题链接
简单
作者:
小贰
,
2024-11-05 15:24:29
,
所有人可见
,
阅读 70
include[HTML_REMOVED]
using namespace std;
long long n,sum,s,mx,ans;
struct w
{
int p,c;
}a[100005] ;
bool cmp(w l,w r)
{
return l.c<r.c;
}
int main(){
cin>>n>>s;
for(int i=1;i<=n;i++)
cin>>a[i].p>>a[i].c,sum+=a[i].p;
sort(a+1,a+n+1,cmp);
for(int i=1,j=1;i<=a[n].c;i++)//枚举训练次数
{
if(s>=sum) ans+=sum;//一次训练的总花费高还是 组团的高
else ans+=s;
while(a[j].c<=i&&j<=n)//判断这个士兵是否还要训练 注意j的范围
{//把已经训练过的金额都剪掉
sum-=a[j].p;
j++;
}
}
cout<<ans;//<<" "<<sum<<endl;
return 0;
}