[PA2014]Żarówki
[PA2014]Żarówki
题目大意:
有\(n(n\le5\times10^5)\)个房间和\(n\)盏灯,你需要在每个房间里放入一盏灯。每盏灯都有一定功率\(p_i\),每间房间都需要功率不小于\(w_i\)的灯泡才可以完全照亮。
你可以去附近的商店换新灯泡,商店里所有正整数功率的灯泡都有售。但由于背包空间有限,你至多只能换\(k\)个灯泡。
你需要找到一个合理的方案使得每个房间都被完全照亮,并在这个前提下使得总功率尽可能小。
思路:
贪心,将房间按\(w_i\)从大到小排序。找到最小的能满足该房间的灯。如果不存在,就花一次换灯泡的机会,换来一个功率恰好等于\(w_i\)的灯泡。最后如果还有多的机会,就将浪费功率最多的灯泡换掉。
源代码:
#include<set>
#include<cstdio>
#include<cctype>
#include<algorithm>
#include<functional>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
typedef long long int64;
const int N=5e5+1;
std::multiset<int> p,t;
int w[N];
int main() {
const int n=getint();
int k=getint();
for(register int i=1;i<=n;i++) {
p.insert(getint());
}
for(register int i=1;i<=n;i++) {
w[i]=getint();
}
std::sort(&w[1],&w[n]+1,std::greater<int>());
int64 ans=0;
for(register int i=1;i<=n;i++) {
std::multiset<int>::iterator it=p.lower_bound(w[i]);
if(it==p.end()) {
if(!k--) {
puts("NIE");
return 0;
}
ans+=w[i];
} else {
ans+=*it;
if(*it-w[i]) {
t.insert(*it-w[i]);
}
p.erase(it);
}
}
while(k--&&!t.empty()) {
ans-=*t.rbegin();
t.erase(--t.end());
}
printf("%lld\n",ans);
return 0;
}
[PA2014]Żarówki的更多相关文章
- BZOJ 3721: PA2014 Final Bazarek
3721: PA2014 Final Bazarek Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 645 Solved: 261[Submit][ ...
- BZOJ 3709: [PA2014]Bohater
3709: [PA2014]Bohater Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1050 Solved: ...
- bzoj3714: [PA2014]Kuglarz
[PA2014]KuglarzTime Limit: 20 Sec Memory Limit: 128 MBSubmit: 553 Solved: 317[Submit][Status][Discus ...
- 【贪心】bzoj 3709:[PA2014]Bohater
3709: [PA2014]Bohater Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 653 Solved: ...
- BZOJ3715: [PA2014]Lustra
3715: [PA2014]Lustra Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 237 Solved: 149[Submit][Status ...
- BZOJ3709: [PA2014]Bohater
3709: [PA2014]Bohater Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 339 Solved: ...
- BZOJ3713: [PA2014]Iloczyn
3713: [PA2014]Iloczyn Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 206 Solved: 112[Submit][Status ...
- BZOJ 3713: [PA2014]Iloczyn( 枚举 )
斐波那契数列<10^9的数很少很少...所以直接暴力枚举就行了... ------------------------------------------------------------- ...
- 3713: [PA2014]Iloczyn
3713: [PA2014]Iloczyn Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 327 Solved: 181[Submit][Status ...
随机推荐
- linux学习笔记之 basename, dirname
前言: basename: 用于打印目录或者文件的基本名称 dirname: 去除文件名中的非目录部分,仅显示与目录有关的内容.dirname命令读取指定路径名保留最后一个/及其后面的字符,删除其他部 ...
- linux 将自己的服务添加到系统service服务
前言 我们在linux上要启动一个程序得时候, 往往都是要写一堆路径, 找到要启动得服务程序, 再用 ./*** 启动服务. 那么我们有没有快速启动方法吗, 答案是肯定得 service 介绍 官方介 ...
- javascript 自动填充功能
javascript 自动填充功能 javascript: (function(){ $("#zipcode").val("zip");$("#pho ...
- Linux系统下目录的权限意义
访问者及其基本权限 Linux系统内的文件访问者有三种身份,分别是: a) 文件和文件目录的所有者: u---User(所有权);b) 文件和文件目录的所有者所在的组的用户: g---Group;c) ...
- HDU 1452 Happy 2004(因数和+费马小定理+积性函数)
Happy 2004 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- The.Glory.of.Innovation 创新之路3放飞好奇
教育最重要的就是 问题不在于教他各种学问,而在于培养他爱好学问的兴趣,而且在这种兴趣充分增长起来的时候,教他以研究学问的方法. ———— 卢梭 如何辨识不同的观点, 老师考查的重点不在于学生 ...
- 【C++ Primer | 08】IO库
IO类 C++的输入输出分为三种: (1)基于控制台的I/O (2)基于文件的I/O (3)基于字符串的I/O istringstream类 描述:从流中提取数据,支持 >> 操作 这里字 ...
- Java枚举类使用和总结
1.枚举类使用情况一: package com.bie.util; import java.util.HashMap; import java.util.Map; /** * * @author bi ...
- [转] Javascript 原型链
1. 类 在C或者Java里,int a;定义了一个int类型的变量a.其中int是类型的名字,a是具体的变量. Javascript 模仿自 Java, 有一部分面向对象编程的部分.在面向对象的编程 ...
- 解决 jQuery 实现父窗口的问题 如window.parent.document.getElementById().innerHTML
因为先前遇到的问题,所以我考虑采用 IFRAME 来隔离不同的脚本,从而实现我需要的效果. 在框架中,我用 JavaScript 获取 JSON 数据,组织成 HTML 代码,最后将其填充至上层文档的 ...