Description

有n个房间和n盏灯,你需要在每个房间里放入一盏灯。每盏灯都有一定功率,每间房间都需要不少于一定功率的灯泡才可以完全照亮。 

你可以去附近的商店换新灯泡,商店里所有正整数功率的灯泡都有售。但由于背包空间有限,你至多只能换k个灯泡。 

你需要找到一个合理的方案使得每个房间都被完全照亮,并在这个前提下使得总功率尽可能小。

Input

第一行两个整数n,k(1<=k<=n<=500000)。 

第二行n个整数pi,表示你现有的灯泡的功率。 

第三行n个整数wi,表示照亮每间房间所需要的最小功率。

Output

如果无法照亮每间房间,仅输出NIE。 

否则输出最小的总功率。

Sample Input

6 2 12 1 7 5 2 10 1 4 11 4 7 5

Sample Output

33

看到数据范围,想到可能是贪心。

我们先按照灯的功率从小到大排序,然后从小到大依次让灯去选择房间。很显然每个灯都要选择自己能够照明的需要功率最大的房间。然后剩下的没有选择的房间只能通过购买灯泡来完成。判断无解也非常容易,如果剩下的房间大于k个就无解。

但是如果剩下房间小于k个,我么显然可以将之前配对好的灯泡替换了来降低答案值。所以我们开个大根堆,维护配对了的的最大值就可以了。

代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<queue>
  7. #include<set>
  8. #include<map>
  9. #include<vector>
  10. #include<ctime>
  11. #define ll long long
  12. #define N 500005
  13. using namespace std;
  14. inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}
  15. int n,k;
  16. ll p[N],w[N];
  17. priority_queue<ll>cha;
  18. multiset<ll>s;
  19. multiset<ll>::iterator it;
  20. ll ans;
  21. int main() {
  22. n=Get(),k=Get();
  23. for(int i=1;i<=n;i++) p[i]=Get();
  24. for(int i=1;i<=n;i++) {
  25. w[i]=Get();
  26. s.insert(w[i]);
  27. }
  28. sort(p+1,p+1+n);
  29. for(int i=1;i<=n;i++) {
  30. it=s.upper_bound(p[i]);
  31. if(it==s.begin()) continue ;
  32. it--;
  33. ans+=p[i];
  34. cha.push(p[i]-*it);
  35. s.erase(it);
  36. if(!s.size()) break;
  37. }
  38. if(s.size()>k) {cout<<"NIE";return 0;}
  39. for(it=s.begin();it!=s.end();it++) {
  40. ans+=*it;
  41. }
  42. k-=s.size();
  43. for(int i=1;i<=k;i++) {
  44. ans-=cha.top();
  45. cha.pop();
  46. if(!cha.size()) break;
  47. }
  48. cout<<ans;
  49. return 0;
  50. }

BSOJ 2423 -- 【PA2014】Final Zarowki的更多相关文章

  1. 【BZOJ3728】PA2014Final Zarowki 贪心

    [BZOJ3728]PA2014Final Zarowki Description 有n个房间和n盏灯,你需要在每个房间里放入一盏灯.每盏灯都有一定功率,每间房间都需要不少于一定功率的灯泡才可以完全照 ...

  2. 【探路者】Final发布

    [探路者]团队项目final发布:贪吃蛇 [探路者]贪吃蛇 final发布展示(视频)链接: http://v.youku.com/v_show/id_XMzIxMDM2MTQ1Ng==.html?s ...

  3. BSOJ 4591 -- 【JLOI2015】城池攻占

    Description 小铭铭最近获得了一副新的桌游,游戏中需要用m个骑士攻占n个城池. 这n个城池用1到n的整数表示.除1号城池外,城池i会受到另一座城池fi的管辖,其中fi 每个城池有一个防御值h ...

  4. 【探路者】final贡献分配

     [探路者]组成员及各位博客地址. 1蔺依铭:http://www.cnblogs.com/linym762/ 2张恩聚:http://www.cnblogs.com/zej87/ 3米赫:http: ...

  5. 【BZOJ-3721】Final Bazarek 贪心

    3721: PA2014 Final Bazarek Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 610  Solved: 243[Submit][ ...

  6. 【JAVA】final修饰Field

    一.简介 final修饰符可以用来修饰变量.方法.类.final修饰变量时一旦被赋值就不可以改变. 二.final成员变量 成员变量是随类初始化或对象初始化而初始化的.当类初始化的时候,会给类变量分配 ...

  7. 【java】final修饰符介绍

    final: 最终,作为一个修饰符特点:1.可以修饰类,函数,变量2.被final修的的类不能被继承.因此类用final修饰可以避免被继承,被子类重写功能.3.被final修饰的方法不可以被重写.4. ...

  8. 【Java】final关键字

    1.final数据 (1)基本类型      数值恒定不变 (2)对象引用      引用恒定不变,初始化的时候指向一个对象后,无法改变为另一个对象,但是对象本身可以修改 2.final方法 可以把方 ...

  9. 【Java】final修饰符的使用

    final修饰符的使用 1.修饰类: final修饰的类不能被继承,final修饰的类里面的方法都是(隐式)final方法 2.修饰方法: final修饰的方法不能被重写 3.修饰变量(被修饰的变量一 ...

随机推荐

  1. Tomcat8源码笔记(二)Bootstrap启动

    TOMCAT源码调试入口是Bootstrap类的main方法,我的启动参数VM: -Dcatalina.home=E:/Tomcat_Source_Code/apache-tomcat-8.0.53- ...

  2. CSS Font文字样式

    font-style: /* 文字样式 italic(倾斜) | normal */ font-weight: /* 文字是否加粗 bold | normal(正常) */ font-size: /* ...

  3. Python JSON 基本使用

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成, ...

  4. .10-浅析webpack源码之graceful-fs模块

    在cachedInput.output.watch三大文件系统中,output非常简单,没有必要讲,其余两个模块依赖于input模块,而input主要是引用了graceful-fs的部分API,所以这 ...

  5. SQL 两个时间获取相差秒数

    SELECT DATEDIFF(SECOND, '2005-12-31 23:59:00', '2006-01-01 00:00:00');

  6. LINQ分页和排序,skip和Take 用法

    LINQ分页和排序,skip和Take 用法 dbconn.BidRecord.OrderBy(p=>p.bid_id).ToList<BidRecord>().OrderBy(p ...

  7. asp.net通过后台代码给前台设置css样式,下拉列表在js中的取值

    后台根据不同的用户登陆隐藏或显示前台div标签 前台: 将div声明成服务器端控件 <div id="div1" runat="server">.. ...

  8. spring boot 之 Mybatis 配置

    ############################## mybatis配置 ######################################mybatis.configuration ...

  9. SpringCloud(二)Eureka集群与Feign

    两个Eureka 上一篇是两个服务像一个Eureka注册,如果Eureka宕掉了就不好了,现在来搭建两个Eureka,两个服务分别像其注册.两个Eureka都用本机来模拟,用两个端口号来表示. 首先修 ...

  10. linux shell脚本之-变量极速入门与进阶(1)

    1,如果创建shell脚本? 使用任意文本编辑软件,一般为vim,创建.sh结尾的文件,在文件的最开头用 #!/bin/bash 注明shell的类型 如: ghostwu@dev:~/linux/s ...