CF854C Planning优先队列|set
C. Planning
Helen works in Metropolis airport. She is responsible for creating a departure schedule. There are n flights that must depart today, the i-th of them is planned to depart at the i-th minute of the day.
Metropolis airport is the main transport hub of Metropolia, so it is difficult to keep the schedule intact. This is exactly the case today: because of technical issues, no flights were able to depart during the first k minutes of the day, so now the new departure schedule must be created.
All n scheduled flights must now depart at different minutes between (k + 1)-th and (k + n)-th, inclusive. However, it's not mandatory for the flights to depart in the same order they were initially scheduled to do so — their order in the new schedule can be different. There is only one restriction: no flight is allowed to depart earlier than it was supposed to depart in the initial schedule.
Helen knows that each minute of delay of the i-th flight costs airport ci burles. Help her find the order for flights to depart in the new schedule that minimizes the total cost for the airport.
The first line contains two integers n and k (1 ≤ k ≤ n ≤ 300 000), here n is the number of flights, and k is the number of minutes in the beginning of the day that the flights did not depart.
The second line contains n integers c1, c2, ..., cn (1 ≤ ci ≤ 107), here ci is the cost of delaying the i-th flight for one minute.
The first line must contain the minimum possible total cost of delaying the flights.
The second line must contain n different integers t1, t2, ..., tn (k + 1 ≤ ti ≤ k + n), here ti is the minute when the i-th flight must depart. If there are several optimal schedules, print any of them.
5 2
4 2 1 10 2
20
3 6 7 4 5
Let us consider sample test. If Helen just moves all flights 2 minutes later preserving the order, the total cost of delaying the flights would be (3 - 1)·4 + (4 - 2)·2 + (5 - 3)·1 + (6 - 4)·10 + (7 - 5)·2 = 38 burles.
However, the better schedule is shown in the sample answer, its cost is (3 - 1)·4 + (6 - 2)·2 + (7 - 3)·1 + (4 - 4)·10 + (5 - 5)·2 = 20burles.
题意:有n架飞机,他们原本的起飞时间依次是1~n,但前k分钟不能起飞,已知第i架飞机延误每1min花费为ci,且不能比原定时间早起飞问每架飞机在第几分钟起飞花费最少。
题解:因为不能比原定时间早起飞,我们先将在第k+i秒可以起飞的飞机放到优先队列里面,再将每分钟花费高的或者花费相同时间比较前的弹出来给他先安排时间起飞。(用set也可(set也是用于排序))
代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 3e5 + ;
struct node{
int id,c;
bool operator < (const node &x)const {
if (c == x.c) return id < x.id;
return c < x.c;
}
}a[N],x;
int ans[N];
int main(){
int n,k;
scanf("%d%d",&n,&k);
for (int i = ; i <= n; i++) {
scanf("%d",&a[i].c);
a[i].id = i;
}
ll sum = ;
priority_queue<node> q;
for (int i = ; i <= k; i++) q.push(a[i]);
for (int i = k+; i <= k+n; i++) {
if (i<=n) q.push(a[i]);
x = q.top();
q.pop();
sum += 1ll*(i-x.id)*x.c;
ans[x.id] = i;
}
printf("%lld\n", sum);
for (int i = ; i <= n; i++)
printf("%d%c", ans[i],i==n?'\n':' ');
return ;
}
优先队列
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 3e5 + ;
struct node{
int id,c;
}a[N],x;
bool cmp(node i,node j) {
if (i.c == j.c) return i.id > j.id;
return i.c>j.c;
}
int ans[N];
set<int> s;
int main(){
int n,k;
scanf("%d%d",&n,&k);
for (int i = ; i <= n; i++) {
scanf("%d",&a[i].c);
a[i].id = i;
s.insert(i+k);
}
sort(a+,a+n+,cmp);
ll sum = ;
for (int i = ; i <= n; i++) {
int x = *s.lower_bound(a[i].id);
sum += 1ll*(x-a[i].id)*a[i].c;
ans[a[i].id] = x;
s.erase(x);
}
printf("%lld\n", sum);
for (int i = ; i <= n; i++)
printf("%d%c", ans[i],i==n?'\n':' ');
return ;
}
Set
CF854C Planning优先队列|set的更多相关文章
- CodeForces - 853A Planning (优先队列,贪心)
Helen works in Metropolis airport. She is responsible for creating a departure schedule. There are n ...
- codeforces 854C.Planning 【贪心/优先队列】
Planning time limit per test 1 second memory limit per test 512 megabytes input standard input outpu ...
- #433 Div2 Problem C Planning (贪心 && 优先队列)
链接 : http://codeforces.com/contest/854/problem/C 题意 : 有 n 架飞机需要分别在 1~n 秒后起飞,允许起飞的时间是从 k 秒后开始,给出每一架飞机 ...
- Planning CodeForces - 854C
Planning CodeForces - 854C 题意:有n架航班,第i架原先的时候是在第i分钟起飞的.现在前k分钟无法有飞机起飞,因此需要调整安排表,延后飞机起飞.仍然要求每一分钟只有一架飞机起 ...
- B - Planning 早训 贪心
B - Planning 这个题目我知道要贪心,也知道怎么贪,但是写不出来,感觉自己好菜. 这个题目要用优先队列维护. 题目大意是飞机延误,不同的飞机每次延误一分钟,它的代价不同,然后问,怎么安排才能 ...
- 敏捷转型历程 - Sprint3 Planning
我: Tech Leader 团队:团队成员分布在两个城市,我所在的城市包括我有4个成员,另外一个城市包括SM有7个成员.另外由于我们的BA离职了,我暂代IT 的PO 职位.PM和我在一个城市,但他不 ...
- 堆排序与优先队列——算法导论(7)
1. 预备知识 (1) 基本概念 如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组 ...
- 数据结构:优先队列 基于list实现(python版)
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author: Minion-Xu #list实现优先队列 class ListPriQueueValueE ...
- python优先队列,队列和栈
打印列表的疑问 class Node: def __str__(self): return "haha" print([Node(),Node()]) print(Node()) ...
随机推荐
- js(二) 实现省市联动(json)
通过HTML页面的city的select选取的value值,从json里面获取相对应的键值对,最后将值拼接到下拉框中 function x1(th) { //通过传入的th的value获取相对应的ci ...
- Vue 组件切换
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- P1111 朋友关系判定
题目描述 有n个人和m对关系,这n个人的编号从1到n. 而m对关系中,每对关系都包含两个人的编号A和B(1<=A,B<=n),用于表示A和B是好友关系. 如果两个数A和B不在好友关系中,则 ...
- 2019-10-19-dotnet-给MatterMost订阅RSS博客
title author date CreateTime categories dotnet 给MatterMost订阅RSS博客 lindexi 2019-10-19 08:12:36 +0800 ...
- Django入门8--Templates过滤器
过滤器大大减少了开发的代码量
- 2018-2-13-WPF-拖动时出现-Invalid-FORMATETC-structure
title author date CreateTime categories WPF 拖动时出现 Invalid FORMATETC structure lindexi 2018-2-13 17:2 ...
- 总结:关于留学网站使用laravel框架的总结
1.从git库中clone后本地项目根目录没有vendor文件夹,安装composer 2.composer install 报错 ,删除 composer.lock 文件,重新执行 composer ...
- H3C 端口隔离简介
- SpringBoot使用Junit测试 防止事物自动回滚
问题:我在测试类中的save方法测试成功通过,但数据库没有插入数据 测试方法如下: @Test @Transactional // @Rollback(false) public voi ...
- 网摘-获取屏幕dc并且将其画面显示在窗体中
获取屏幕dc并且将其画面显示在窗体中 HWND hWnd = ::GetDesktopWindow();//获得屏幕的HWND. HDC hScreenDC = ::GetDC(hWnd); // ...