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

NKOI 1363 (基础二分)

时间:2015-04-03 23:39:17      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

【COCI 2011/2012 CONTEST #5-2】砍树

Time Limit:10000MS  Memory Limit:32000K
Total Submit:49 Accepted:26 
Case Time Limit:1000MS

Description

N棵树,每棵都有一个整数高度。有一个木头的总需要量M。 

现在确定一个最大的统一的砍树高度H,如果某棵树的高度大于H,则高出的部分被砍下。使得所有被砍下的木材长度之和达到M(允许稍超过M)。 


例如,有4棵树,高度分别是20 15 10 17, 需要的木材长度为 7,砍树高度为15时,第1棵树被砍下5,第4棵树被砍下2,得到的总长度为7。如果砍树高度为16时,第1棵树被砍下4,第4棵树被砍下1,则得到的木材数量为5。 


Input

第1行:2个整数N和M,N表示树木的数量(1 ≤ N ≤ 1 000 000),M表示需要的木材总长度(1 ≤ M ≤ 2 000 000 000)。 


第2行: N个整数表示每棵树的高度,值均不超过1 000 000 000。所有木材高度之和大于M,因此必然有解。 

Output

第1行:1个整数,表示砍树的最高高度。 

Sample Input

 

5 20
4 42 40 26 46

 

Sample Output

 

36

 

Source

Croatian Open Competition in Informatics 2011/2012

解题思路:

  这道题目就是直接把最低的树和最高的树选出来,然后构成一个[l,r]的区间,在这个区间上进行二分,

找到一个h,使得a[i]>=k,且满足sum>=m的最大的h,既然要求最大的,那么我们最后输出r就

可以了。

代码:

技术分享
 1  # include<cstdio>
 2     # include<iostream>
 3     # include<algorithm>
 4 
 5     using namespace std;
 6 
 7     # define MAX 1000000+4
 8 
 9     int a[MAX];
10     int n,m;
11     int l,r;
12     int check ( int h )
13     {
14          int sum = 0;
15          for ( int i = 0;i < n;i++ )
16          {
17              if ( a[i] > h )
18              {
19                  sum+=(a[i]-h);
20              }
21              if ( sum >= m )
22              {
23                  return 1;
24              }
25          }
26          return 0;
27     }
28 
29     int main(void)
30     {
31         scanf("%d%d",&n,&m);
32         for ( int i = 0;i < n;i++ )
33         {
34             scanf("%d",&a[i]);
35             l = min(l,a[i]);
36             r = max(r,a[i]);
37         }
38         while ( l <= r )
39         {
40             int mid = (l+r)>>1;
41             if ( check(mid) )
42             {
43                 l = mid+1;
44             }
45             else
46             {
47                 r = mid-1;
48             }
49         }
50        printf("%d\n",r);
51         return 0;
52     }
View Code

 

NKOI 1363 (基础二分)

标签:

原文地址:http://www.cnblogs.com/wikioibai/p/4391146.html

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