码迷,mamicode.com
首页 > 其他好文 > 详细

POJ_3104_Drying

时间:2016-04-23 09:05:49      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

描述


http://poj.org/problem?id=3104

分析


二分.

最大化最小值.

y为原来的最大时间.然后二分可行时间x,如果有自然风干时间>x的,用吹分机加速,多出的时间用多的速度弥补,并向上取整,看吹风机是否够用.

 

注意:

1.k=1时,v=k-1=0,不能做除数.............要特判.........

技术分享
 1 #include<cstdio>
 2 #include<algorithm>
 3 using std :: max;
 4 
 5 const int maxn=100005;
 6 int n,k,x,y;
 7 int a[maxn];
 8 
 9 bool C(int x)
10 {
11     int rest=x;
12     for(int i=1;i<=n;i++)
13     {
14         if(a[i]>x)
15         {
16             int d=a[i]-x;
17             int v=k-1;
18             int res=d/v;
19             if(d%v!=0) res++;
20             rest-=res;
21         }
22         if(rest<0) return false;
23     }
24     return true;
25 }
26 
27 void solve()
28 {
29     while(x<y)
30     {
31         int m=x+(y-x)/2;
32         if(C(m)) y=m;
33         else x=m+1;
34     }
35     printf("%d\n",x);
36 }
37 
38 void init()
39 {
40     scanf("%d",&n);
41     for(int i=1;i<=n;i++) { scanf("%d",&a[i]); y=max(y,a[i]); }
42     scanf("%d",&k);
43 }
44 
45 int main()
46 {
47     freopen("dry.in","r",stdin);
48     freopen("dry.out","w",stdout);
49     init();
50     if(k==1)
51     {
52         printf("%d\n",y);
53         return 0;
54     }
55     solve();
56     fclose(stdin);
57     fclose(stdout);
58     return 0;
59 }
View Code

 

POJ_3104_Drying

标签:

原文地址:http://www.cnblogs.com/Sunnie69/p/5423821.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!