C3-Zexal的浩瀚星辰

题目描述

Zexal想要发射火箭,但是由于能源供应不足了,所以一些火箭需要延迟发射。 每个火箭每延迟一小时发射都会相应的损失。Zexal了解到,一共有n个火箭,其中第i个火箭原计划在第i小时发射,即1~n时间段发射,现预计k小时后电力可以恢复正常,即所有火箭将在k+1~k+n时间段内发射,

新的火箭发射计划不要求按照最初的发射计划顺序,唯一的要求是每个火箭都不能早于原定时间发射。请你帮忙计算一下最小的损失吧。

注意:时间均以小时为最小单位。由于条件有限,一次只能发射一枚火箭。

输入

输入包含多组数据。

每组数据第一行为正整数nk1n500000,1k500000),为火箭总数和延迟时间。

接下来是n个正整数 pi,代表第i个火箭每延迟一小时的损失费(1≤pi≤104)。

输出

对于每组数据,输出一行,为最小的损失费用。

输入样例

1 2
10
2 1
10 100

输出样例

20
20

代码

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
struct gun
{
    int l,p;
} s[500005];
bool operator<( gun x, gun y)
{
    if(x.p==y.p)
        return x.l<y.l;
    return x.p < y.p;
}
priority_queue<gun> Q;
int main()
{
    int n,k;
    while(cin>>n>>k)
    {
        long long ans = 0;
        for(int i = 0; i < n; i++)
        {
            cin>>s[i].p;
            s[i].l = i;
        }
        for(int i = 0; i < k; i++)
            Q.push(s[i]);
        for(int i = k; i < k+n; i++)
        {
            if(i < n) Q.push(s[i]);
            gun t = Q.top();
            ans += (long long )(i - t.l) * t.p;
            Q.pop();
        }
        cout << ans <<endl;
    }

    return 0;
}
原文地址:https://www.cnblogs.com/kubab119/p/11823213.html