有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
HINT

解释:将2和10换成4和4。配对方案为1-1,4-4,4-4,5-5,7-7,11-12。

Sol:

/*
将手头上有的亮度a及要求的房间亮度b都降序排出来
一个个拿出要求的亮度,将大于等于它的a的值一个个丢到小根堆q里
然后看下q是否为空,如果为空说明此时要去商店拿一个亮度与当前一致的
如果q不为空,则弹出堆顶值,并将两者的差值加到一个大堆根q1中
全部做完后,如果还有名额去商店拿灯泡,则弹出q1的堆顶
*/
#include<bits/stdc++.h>
#include<cstdio>
#include<queue>
#define N 500050
using namespace std;
priority_queue<int,vector<int>,greater<int> >q;
priority_queue<int,vector<int>,less<int> >q1;
inline bool cmp(int a,int b)
{
return a>b;
}
int a[N],b[N];
int n,k,t,x;
long long ans;
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)
scanf("%d",a+i);
for(int i=;i<=n;i++)
scanf("%d",b+i);
sort(a+,a+n+,cmp);//手头上的灯,降序排好
sort(b+,b+n+,cmp);//要求的灯的亮度
t=;
for(int i=;i<=n;i++)
{
while(a[t]>=b[i]&&t) //将大于第i个所要求的灯亮度的灯丢到小根堆里
q.push(a[t++]);
if(q.empty()) //如果堆为空
{
ans=ans+b[i];//使用当前亮度
if(k) //如果还可以换灯泡
k--;
else //堆中没有大于当前要求亮度的,又没办法去商店拿,于是无解
return printf("NIE"),;
}
else //说明堆中还有元素值大于当前亮度的
{
x=q.top();
q.pop();
ans=ans+x;//从小根堆中取出一个大于等于当前要求亮度的且值最小的,用上之
q1.push(x-b[i]);//差值放到大根堆中
}
}
while(k--&&!q1.empty())//如果还可以换灯泡的话
{
ans=ans-q1.top();
// cout<<"change it ans is "<<ans<<endl;
q1.pop();
}
return printf("%lld",ans),;
}

BZOJ[3728]PA2014 Final Zarowki的更多相关文章

  1. BZOJ 3721: PA2014 Final Bazarek

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

  2. bzoj 3722: PA2014 Final Budowa

    3722: PA2014 Final Budowa Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 303  Solved: 108[Submit][St ...

  3. BZOJ 3727 PA2014 Final Zadanie 树形DP

    题目大意:给定一棵树,令一个点到全部点的距离与点权的乘积之和为b[i].求每一个点的权值a[i] 首先假设给定a[i]我们能够非常轻松的求出b[i] 可是反过来怎么搞?高斯消元?30W? 考虑已知a[ ...

  4. BZOJ 3721: PA2014 Final Bazarek【乱搞】

    有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n<=1000000),表示商品数量.接下来一行有n个整数,表示每件商品的价格,范 ...

  5. bzoj 3721: PA2014 Final Bazarek 贪心

    如果没有限制,直接取前 $k$ 大即可. 有限制,则只有几种可能:奇换偶,偶换奇. 维护奇数偶数的前缀最小值和后缀最大值即可. code: #include <bits/stdc++.h> ...

  6. 【BZOJ 3727】 3727: PA2014 Final Zadanie (递推)

    3727: PA2014 Final Zadanie Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 279  Solved: 121 Descript ...

  7. 【BZOJ3727】PA2014 Final Zadanie 树形DP

    [BZOJ3727]PA2014 Final Zadanie Description 吉丽YY了一道神题,题面是这样的:“一棵n个点的树,每条边长度为1,第i个结点居住着a[i]个人.假设在i结点举行 ...

  8. 【BZOJ3721】PA2014 Final Bazarek 贪心

    [BZOJ3721]PA2014 Final Bazarek Description 有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n ...

  9. bzoj 3728: PA2014Final Zarowki

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

随机推荐

  1. ids

    https://www.cnblogs.com/wyt007/p/8309377.html

  2. 长沙理工大学第十二届ACM大赛L 选择困难症 (剪枝暴搜)

    链接:https://ac.nowcoder.com/acm/contest/1/L 来源:牛客网 选择困难症 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 131072K,其他语言 ...

  3. jquery.fancybox.js 解决只加载一次的问题

    问题描述:有一块图片区域,页面第一次加载的时候jQuery(".fancybox-button").fancybox({}); 使用ajax上传成功后显示在图片区域,再次jQuer ...

  4. C#基础知识之父子类,实例、静态成员变量,构造函数的执行顺序(经典示例)

    父子类.示例.静态成员变量.构造函数的概念的基础理解完全可以利用下面的示例诠释,非常经典,直接上代码: public class ShowInfo { public ShowInfo(string i ...

  5. IntelliTrace调试

    当您进行调试时,IntelliTrace 将在后台收集有关托管应用程序的数据,其中包括来自许多框架组件(例如 ADO.NET.ASP.NET 和 System.XML)的信息.这些 IntelliTr ...

  6. VCL界面控件DevExpress VCL Controls发布v18.2.7|附下载

    DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...

  7. java编写算法题格式(链表和二叉树)

    (1)链表 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; ...

  8. 认识js数组

    1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多维数组,但是因为数组里面可以包含对象(数组也是一个对象),所以数组可以通过相互嵌套实现类似多维数 ...

  9. BZOJ 2427: [HAOI2010]软件安装 tarjan + 树形背包

    Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和 ...

  10. Floyd求解最短路

    Floyd算法适用于求解全源最短路.也就是能够求解任意两点间的最短路径并且是适用于含有负权边的图,但是含有负环则不行了!空间复杂度为O(n2).时间复杂度为O(n3).其具体的原理在百度能够找到很多, ...