Codeforces 854
来源:互联网 发布:软件订阅模式 编辑:程序博客网 时间:2024/06/05 14:58
题意:对于给定的
思路:对于每架飞机的延误费用
转化后可得:
可知,后部分等式,为定值,要使得结果最小,需要使得前半部分值最小。
设对于
如果交换
设交换后总花费大于原费用可得:
化简可得:
可得贪心策略:
在满足要求的情况下(
#include <bits/stdc++.h>using namespace std;using namespace std;typedef long long ll;typedef pair<int, int> pii;struct node{ ll p, c; node(ll a = 0, ll b = 0) { p = a; c = b; }};struct cmp{ bool operator()(node x, node y) { if (x.c != y.c)return x.c > y.c; return x.p < y.p; }};set<node, cmp>s;int a[300000 + 50];int main(){ ll k; int n; scanf("%d%I64d", &n, &k); ll ans = 0; for (int i = 1; i <= n; i++) { ll c; scanf("%I64d", &c); s.insert(node(i, c)); if (i >= k + 1) { a[s.begin()->p] = i; ans += s.begin()->c*(i - s.begin()->p); s.erase(s.begin()); } } for (int i = 1; i <= k; i++) { a[s.begin()->p] = i + n; ans += s.begin()->c*(i + n - s.begin()->p); s.erase(s.begin()); } printf("%I64d\n", ans); //printf("%I64d\n", ans); for (int i = 1; i <= n; i++) { if (i != 1)printf(" "); printf("%d", a[i]); } printf("\n"); //sp;}
阅读全文
0 0
- Codeforces 854
- Codeforces 854 A Fraction
- Codeforces 854A
- Codeforces-854B
- Codeforces-854C
- Codeforces 854 A Fraction
- Codeforces 854A Fraction
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- (DOM艺术)图片仓库改进一:完全分离
- HDU 3874 Necklace
- set action为Call时startActivity(intent);出现红线错误的解决方法
- maven核心,pom.xml详解
- 利用Java代码实现图片的下载:
- Codeforces 854
- 171007 逆向-PE压缩
- 例题8-4:传说中的车(问题分解)
- 了解JDBC
- NN-CRF
- 实现一个具有文件下载功能的网页
- XTU 1271 Color
- java.lang.IllegalArgumentException: Too many bind arguments. 4 arguments were provided but the stat
- (一)网络与信息安全概论入门阶段笔记