bzoj 3969: [WF2013]Low Power
2015-05-21 10:42
423 查看
Description
有n个机器,每个机器有2个芯片,每个芯片可以放k个电池。每个芯片能量是k个电池的能量的最小值。
两个芯片的能量之差越小,这个机器就工作的越好。
现在有2nk个电池,已知它们的能量,我们要把它们放在n个机器上的芯片上,
使得所有机器的能量之差的最大值最小。
Input
第一行,两个正整数,n和k。第二行,2nk个整数,表示每个电池的能量。
Output
一行一个整数,表示所有机器的能量之差的最大值最小是多少。Sample Input
2 31 2 3 4 5 6 7 8 9 10 11 12
Sample Output
1HINT
2nk <= 10^6, 1 <= pi <= 10^9。二分答案+贪心验证
#include<cstdio> #include<string> #include<cstring> #include<algorithm> using namespace std; int a[1000001]; bool v[1000001]; int n,k,m; inline bool check(int lim) { memset(v,false,sizeof(v)); int i; int s=0; for(i=1;i<=m-1;i++) { if(a[i+1]-a[i]<=lim) { s++; v[i]=true; v[i+1]=true; i++; if(s>=n) break; } } if(s<n) return false; int sum=0; for(i=m;i>=1;i--) { if(!v[i]) sum++; else { if(sum<k-1) return false; sum-=(k-1); } } return true; } int main() { scanf("%d%d",&n,&k); m=2*n*k; int i; for(i=1;i<=m;i++) scanf("%d",&a[i]); sort(a+1,a+1+m); int l=0,r=1000000000; while(l<=r) { int mid=(l+r)/2; if(!check(mid)) l=mid+1; else r=mid-1; } printf("%d\n",l); return 0; }
相关文章推荐
- 【二分贪心】Bzoj3969 [WF2013] Low Power
- BZOJ 3969: [WF2013]Low Power
- bzoj 3969 WF2013 Low Power [贪心] [二分答案]
- BZOJ_3969_[WF2013]Low Power_二分答案
- bzoj 3969: [WF2013]Low Power 二分
- [BZOJ3969]WF2013 Low Power|二分答案|贪心
- 【BZOJ】3971 [WF2013]Матрёшка
- BZOJ3969 [WF2013]Low Power
- bzoj3969 [WF2013]Low Power
- BZOJ 3969 low power
- bzoj3969 [WF2013]Low Power
- [bzoj3955] [WF2013]Surely You Congest
- bzoj3953: [WF2013]Self-Assembly
- 【 bzoj 3955 】[WF2013]Surely You Congest - 网络流 SPFA
- [bzoj3953] [WF2013]Self-Assembly
- 【BZOJ】【P3172】【Tjoi2013】【单词】【题解】【SAM】
- [bzoj3144][HNOI2013] 切糕 最小割
- BZOJ 3238 [Ahoi2013]差异 后缀数组+单调栈
- BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组
- 【bzoj3110】[Zjoi2013]K大数查询 权值线段树套区间线段树