POJ 3258 River Hopscotch 二分枚举

题目:http://poj.org/problem?id=3258

又A一道,睡觉去了。。

 1 #include <stdio.h>
 2 #include <algorithm>
 3 
 4 int d[50010];
 5 int s, n, m;
 6 
 7 bool judge(int mid)
 8 {
 9     int sum = 0, cnt = 0;
10     for(int i = 1; i <= n+1; i++)
11     {
12         sum += d[i] - d[i-1];
13         if(sum < mid)
14             cnt++;
15         else
16             sum = 0;
17     }
18     if(cnt > m)
19         return 1;
20     else return 0;
21 }
22 
23 int main()
24 {
25     scanf("%d %d %d", &s, &n, &m);
26     for(int i = 1; i <= n; i++)
27     {
28         scanf("%d", &d[i]);
29     }
30     d[0] = 0;
31     d[n+1] = s;
32     std::sort(d, d+n+2);
33 
34     int low = 0, high = s+1, mid;
35     while(low < high)
36     {
37         mid = (high + low) / 2;
38         if(judge(mid))
39             high = mid;
40         else
41             low = mid + 1;
42     }
43     printf("%d\n", low-1);
44     return 0;
45 }
View Code

 

posted @ 2013-10-15 22:09  Anti-Magic  阅读(145)  评论(0编辑  收藏  举报