第八周codeforces 853A

来源:互联网 发布:电子商务系统代码java 编辑:程序博客网 时间:2024/06/07 03:15

codeForces-853A Planning

  1. 题目链接
  2. 解题思路:刚开始看到这道题就想到用贪心了,但是当时是想把飞机按照价值从大到小排序,然后拿着价值去找时间,后来就超时了。看了题解,这道题用了优先对列,前k个直接放进去,从k+1开始还剩符合条件的飞机就塞进优先队列里,然后找出这是价值最大的飞机起飞就好了,还有要注意强制类型转化的问题
  3. AC
#include<stdio.h>#include<string.h>#include<algorithm>#include<queue>using namespace std;const int maxn=300100;struct Fl{        int time,cost;        bool operator <(const Fl &a)const        {                return cost<a.cost;        }}fl[maxn];int ans[maxn];int main(){        int n,k;        long long sum=0;        priority_queue<Fl>  q;        scanf("%d%d",&n,&k);        for(int i=1;i<=n;i++)        {                scanf("%d",&fl[i].cost);                fl[i].time=i;        }        for(int i=1;i<=k;i++)        q.push(fl[i]);        for(int i=k+1;i<=n+k;i++)        {                if(i<=n)                q.push(fl[i]);                Fl cur=q.top();                q.pop();                sum+=(long long)(i-cur.time)*cur.cost;//没有进行类型转换导致错误                ans[cur.time]=i;        }        printf("%lld\n",sum);        for(int i=1;i<=n;i++)        {                if(i==1)                printf("%d",ans[i]);                else                printf(" %d",ans[i]);        }        return 0;}
原创粉丝点击