0
点赞
收藏
分享

微信扫一扫

Jury Meeting CodeForces - 854D


Jury Meeting

​​CodeForces - 854D ​​

题意:给出飞机航班数目,以及延迟时间。第二行给出每个航班每延时一分钟需要的花费。(本来每个航班的起飞时间为第i个i,如今所有的飞机都要在k之后出发,要重新排版飞机起飞的顺序,但是不能让一个航班提前出发)

思路:突然卡出了,然后写了一个超时的写法,要处理这个条件:不能让一个航班提前出发。要维护优先队列,每次只把前k个的放进去。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;
struct node{
ll id,co;
node(){}
node(int a,int b){id=a;co=b;}
bool operator <(const node &u)const{
return co<u.co;//da-xiao
}

};
struct node1{
ll i,fi;
node1(){}
node1(int a,int b){i=a,fi=b;}
bool operator <(const node1 &u)const{

return fi<u.fi;//da-xiao
}
};
node1 ans[300000+10];
int a[300000+10];
priority_queue<node> q,p;
int main(){
int n,k;
long long tmp=0;
int cnt=0;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=k;i++){
q.push(node(i,a[i]));
}
for(int i=k+1;i<=k+n;i++){
if(i<=n) q.push(node(i,a[i]));
node x=q.top();
ans[cnt++]=node1(i,x.id);
tmp+=(i-x.id)*x.co;//300000*1e7==溢出
q.pop();
}
sort(ans,ans+cnt);
cout<<tmp<<endl;
for(int i=0;i<cnt-1;i++){
cout<<ans[i].i<<" ";
}
cout<<ans[cnt-1].i<<endl;
return 0;
}

 

举报

相关推荐

0 条评论