解提示思路一定要清醒,想好了再干。
别直接下笔,有思路吗,没思路写什么
--scz
被这个题卡了1h 我还是太弱了
太弱了
思路本身好想,从后往前扫,能搞就干,先玩最大,同时间扔一块
(color{red}{但是我写了啥})
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstdio>
using namespace std;
struct gam{
int m;
int t;
}g[1000000];
int m;
int now;
priority_queue <int>q;
int n;
int last;
int d;
int co;
int wor;
bool cmp(gam x,gam y){
if(x.t==y.t)
return x.m>y.m;
return x.t<y.t;
}
int ans;
int main(){
scanf("%d%d",&m,&n);
for(int i=1;i<=n;++i){
scanf("%d",&g[i].t);
}
for(int i=1;i<=n;++i){
scanf("%d",&g[i].m);
wor+=g[i].m;
}
sort(g+1,g+n+1,cmp);
now=g[n].t;
last=now;//上一个任务剩余时间
for(int i=n;i>=1;--i){
q.push(g[i].m);
while(g[i].t==g[i-1].t){
i--;
q.push(g[i].m);
}
while(last>g[i-1].t&&last>0){
if(!q.empty()){
co+=q.top();
q.pop();
last--;
}
else{
last=g[i-1].t;
break;
}
}
};
cout<<m-wor+co;
return 0;
}