标签:sample else 答案 http scan com 二分 nbsp strong
Time Limit: 20 Sec Memory Limit: 256 MB
http://www.lydsy.com/JudgeOnline/problem.php?id=3969
Output
一行一个整数,表示所有机器的能量之差的最大值最小是多少。
2nk <= 10^6, 1 <= pi <= 10^9。
【题目大意】
让最大差值的机器的值最小。
【思路】
二分答案
【code】
我对二分右端点有点疑问。有的dalao r=排序后最后一个 我怎么觉得是 2*n*k-k+1个....
bzoj崩了...没测...
先考虑二分什么 ...二分的左右端点是什么...
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int n,k,mid,ans,l,r; int w[1000005]; bool check() { /*for(int i=2*n;i;i--) { if(w[i]-w[i-1]>mid) return false; }*/ for(int p=1,q=1;p<=2*n*k&&q<=n;p++) { if(2*q*k!=p)return false; if(w[p]-w[p-1]>mid)p++,q++; } return true; } int main() { scanf("%d%d",&n,&k); for(int i=1;i<=2*n*k;i++) scanf("%d",&w[i]); sort(w+1,w+2*n*k+1); // l=w[2]-w[1]; r=w[2*n*k-k+1]-w[1];//*** l=0;//最小两个数的差不一定最小。 while(l<=r) { mid=l+(r-l)/2; if(check())ans=mid,r=mid-1; else l=mid+1; } printf("%d\n",ans); return 0; }
标签:sample else 答案 http scan com 二分 nbsp strong
原文地址:http://www.cnblogs.com/zzyh/p/7041079.html