标签:poj 3104 二分
/*设某次二分出的一个值是mid: 1、对于一件ai值小于等于mid的衣服,直接晾干即可; 2、对于一件ai值大于mid值的衣服,最少的用时是用机器一段时间, 晾干一段时间,设这两段时间分别是x1和x2, 那么有mid=x1+x2,ai<=k*x1+x2,解得x1>=(ai-mid)/(k-1) , 所以对(ai-mid)/(k-1)向上取整就是该件衣服的最少用时。*/ # include <stdio.h> # include <string.h> # include <algorithm> # include <stdlib.h> # include <math.h> using namespace std; int a[100010]; int n,k; int check(int x) { int cot=0;//烘干时间 for(int i=0;i<n;i++) { if(a[i]<=x)//自然吹干 continue; cot+=(int)ceil((double) (a[i]-x)/(k-1));//向上取整 if(cot>x) return false; } return true; } int main() { int i,cot,count; char s[25]; while(~scanf("%d",&n)) { for(i=0;i<n;i++) scanf("%d",&a[i]); scanf("%d",&k); sort(a,a+n); cot=0; count=0; int l=0; int r=a[n-1]; if(k!=1) { while(l<=r) { int mid=(l+r)/2; if(check(mid)) r=mid-1; else l=mid+1; } printf("%d\n",l); } else printf("%d\n",a[n-1]); } return 0; }
poj 3104 Drying (二分),布布扣,bubuko.com
标签:poj 3104 二分
原文地址:http://blog.csdn.net/lp_opai/article/details/38305241