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

2017暑假 二分

时间:2017-07-30 11:32:46      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:技术   class   最小   closed   sort   技术分享   奶牛   ops   str   

  • POJ 3258 - River Hopscotch

题意:奶牛弹跳力大PK~河上有若干石头,奶牛从一端跳到对岸即可。Farmer John觉得石头太多了,距离太近了没难度,要你帮他去掉m个石头,使得奶牛需要跳跃的最小距离能多大就多大(MAX)。

思路:没错,就是最大化最小值,没错,就是二分~

二分对象:最小距离d。

check方式:cnt一下距离小于d的石头,<=m即可。

ps:去掉一个石头之后下一个石头的前驱为当前石头的前驱,要记得更新但是不要直接改数据啊zz。

代码如下: 

技术分享
 1 #include <algorithm>
 2 #include <iostream>
 3 #include <stdio.h>
 4 
 5 using namespace std;
 6 
 7 long long l,r[50005];
 8 int n,m;
 9 
10 bool c(long long d)
11 {
12     int cnt = 0;
13     for(int i = 1, j = 0; i <= n+1; i++)//pre j;
14     {
15         if((r[i] - r[j]) < d) cnt++;
16         else j = i;
17     }
18     return cnt <= m;
19 }
20 
21 int main()
22 {
23     scanf("%I64d%d%d",&l,&n,&m);
24     long long lb = 1e9, ub = l;
25     r[n+1] = l;
26     r[0] = 0;
27     for(int i = 1; i <= n; i++) scanf("%I64d", &r[i]);
28     sort(r+1, r+n+1);
29     for(int i = 1; i <= n+1; i++) lb = min(lb, (r[i] - r[i-1]));
30 
31     while(ub-lb > 1)//此时mid>lb;
32     {
33         long long mid = (lb+ub)/2;
34         if(c(mid)) lb = mid;
35         else ub = mid;
36     }
37 
38     printf("%I64d\n", lb);
39 
40     return 0;
41 }
View Code

 

窝貌似落下了很多题。。。

emm...假装不知道。。。                                                                                                                           7.30

 

2017暑假 二分

标签:技术   class   最小   closed   sort   技术分享   奶牛   ops   str   

原文地址:http://www.cnblogs.com/curieorz/p/7258293.html

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