poj3258 二分最小值最大化

来源:互联网 发布:vnpy 知乎 编辑:程序博客网 时间:2024/06/07 10:17

 

 

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

 

River Hopscotch
Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 9150 Accepted: 3951

Description

Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully jumping from rock to rock in a river. The excitement takes place on a long, straight river with a rock at the start and another rock at the end,L units away from the start (1 ≤ L ≤ 1,000,000,000). Along the river between the starting and ending rocks,N (0 ≤ N ≤ 50,000) more rocks appear, each at an integral distanceDi from the start (0 < Di < L).

To play the game, each cow in turn starts at the starting rock and tries to reach the finish at the ending rock, jumping only from rock to rock. Of course, less agile cows never make it to the final rock, ending up instead in the river.

Farmer John is proud of his cows and watches this event each year. But as time goes by, he tires of watching the timid cows of the other farmers limp across the short distances between rocks placed too closely together. He plans to remove several rocks in order to increase the shortest distance a cow will have to jump to reach the end. He knows he cannot remove the starting and ending rocks, but he calculates that he has enough resources to remove up toM rocks (0 ≤ MN).

FJ wants to know exactly how much he can increase the shortest distance *before* he starts removing the rocks. Help Farmer John determine the greatest possible shortest distance a cow has to jump after removing the optimal set ofM rocks.

Input

Line 1: Three space-separated integers: L,N, and M
Lines 2..N+1: Each line contains a single integer indicating how far some rock is away from the starting rock. No two rocks share the same position.

Output

Line 1: A single integer that is the maximum of the shortest distance a cow has to jump after removingM rocks

Sample Input

25 5 2214112117

Sample Output

4

Hint

Before removing any rocks, the shortest jump was a jump of 2 from 0 (the start) to 2. After removing the rocks at 2 and 14, the shortest required jump is a jump of 4 (from 17 to 21 or from 21 to 25).

Source

USACO 2006 December Silver

 

 

 

思路:二分距离,对于每个距离d判断当前的N个石头能否删除小于M个小于距离d的石头,如果能,代表距离还要增大,否则,距离减小。

 

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define MAXN 50005

int a[MAXN];

int C(int d,int N,int M)  //N个石头是否能删除掉小于M个<d距离的石头
{
 int i;
 int del=0;
 int sum=0;
 for(i=1;i<N;i++)
 {
  if((sum+=a[i]-a[i-1])<d)
   del++;
  else
   sum=0;
 }
 if(del<=M)
  return 1;
 return 0;
}
int main()
{
// freopen("C:\\1.txt","r",stdin);
 int L,N,M;
 int i;
 cin>>L>>N>>M;
 for(i=1;i<=N;i++)
  cin>>a[i];
 a[N+1]=L;
 sort(a,a+N+2);
 int l=0,r=L+1;
 while(r-l>1)
 {
  int mid=(l+r)/2;
  if(C(mid,N+2,M))
   l=mid;
  else
   r=mid;
 }
 printf("%d\n",l);
 return 0;
}

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 农村平房顶四墙面渗水怎么办 被蝎子精蛰了怎么办 小娃头摔包要怎么办抹个什么 老人死了银行钱存死期怎么办 飙酷车神2一进画面就闪退怎么办 电脑开机键盘鼠标没反应怎么办 玩gta4自由城卡怎么办 gta5游戏服务当前不可用怎么办 健身后胳膊变粗怎么办 健身后手臂变粗怎么办 家猫见到我就跑怎么办 走路多了小腿酸痛怎么办 脚有脚气很痒怎么办 地板精油喷多了怎么办 史莱姆泥变硬了怎么办 dnf剑帝命中率低怎么办 无意中讲话伤害了人怎么办 高中上不下去了怎么办 高三坚持不下去怎么办 word点了不保存怎么办 做了ppt没保存怎么办 中班安全教案迷眼了怎么办 美的空调尘满怎么办 高考报名系统密码忘记怎么办 高考理综8题怎么办 高三了语文很差怎么办 高三了语文成绩差怎么办 供太岁初一忘了怎么办 高一英语100多分怎么办 高一孩子英语差怎么办 高考中题目有错别字怎么办 相亲简单自我介绍后不回我怎么办 初中毕业没考上高中怎么办 幼儿园小朋友经常说脏话幼师怎么办 我不想当组长了怎么办 领导让我做组长怎么办 情人抓住把柄敲诈自己老公怎么办 我太看重朋友了怎么办 初中生下面长硬胡子痒怎么办 孩子不爱与人沟通怎么办 初一初二没学好初三怎么办