NOIP2015-stone(二分答案)

这道题在考试时二分答案写炸了,结果得了20分。。。。。同学有用贪心写的(对,贪心!!)都得了30,我感到了深深的恶意。这段时间在忙转语言,现在重新整理一下NOIP的题。

题目来源:vijos

题目如下:

组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳 跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走 M 块岩石(不能 移走起点和终点的岩石)。

格式

输入格式

输入第一行包含三个整数 L,N,M,分别表示起点到终点的距离,起点和终 点之间的岩石数,以及组委会至多移走的岩石数。
接下来 N 行,每行一个整数,第 i 行的整数 Di0<Di<L)表示第 i 块岩石与 起点的距离。这些岩石按与起点距离从小到大的顺序给出,且不会有两个岩石出现在同 一个位置。

输出格式

输出只包含一个整数,即最短跳跃距离的最大值。

样例1

样例输入1[复制]

25 5 2
2
11
14
17
21

样例输出1[复制]

4

限制

对于20%的数据,0≤M≤N≤10
对于50%的数据,0≤M≤N≤100
对于100%的数据,0≤M≤N≤500001≤L≤1000000000

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <iostream>
 5
 6 using namespace std;
 7
 8 int a[50010];
 9 int n,m;
10
11 int ok(int mid)            //判断当前答案是否可行
12     {
13     int i,head=0,count=0;        //head记录上一个可行的点,count计数
14     for(i=1;i<=n;i++)
15     {
16         if(a[i]-head<mid)
17             count++;
18         else head=a[i];
19     }
20     if(count<=m) return 1;    //如果当前数量小于等于要求(可行),则返回1
21     else return 0;        //否则返回0
22 }
23
24 int main()
25 {
26     int l,max=0,ans;
27     a[0]=0;
28
29     scanf("%d%d%d",&l,&n,&m);
30     if (m==0) {    cout<<l; return 0;}
31     for (int i=1; i<=n; i++)
32         scanf("%d",&a[i]);
33     n++;
34     a[n]=l;
35     int head=1;
36     int tail=l;
37     while(head<=tail)        //head,head记录当前二分的区间
38     {
39         if(ok((head+tail)/2))
40             head=(head+tail)/2+1;
41         else tail=(head+tail)/2-1;
42         ans=(head+tail)/2;
43     }
44     cout <<ans;
45     return 0;
46 }
时间: 2024-10-21 23:07:22

NOIP2015-stone(二分答案)的相关文章

NOIP2015跳石头[二分答案]

题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选 择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石(不含起点和终 点的岩石).在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达 终点. 为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳 跃距离尽可能长.由于预算限制,组委会至多从起点和终点之间移走 M 块岩石(不能 移走起点和终点的岩石). 输入输出格式 输入格

[NOIP2015]运输计划 D2 T3 LCA+二分答案+差分数组

[NOIP2015]运输计划 D2 T3 Description 公元2044年,人类进入了宇宙纪元. L国有n个星球,还有n-1条双向航道,每条航道建立在两个星球之间,这n-1条航道连通了L国的所有星球. 小P掌管一家物流公司,该公司有很多个运输计划,每个运输计划形如:有一艘物流飞船需要从ui号星球沿最快的宇航路径飞行到vi号星球去.显然,飞船驶过一条航道是需要时间的,对于航道j,任意飞船驶过它所花费的时间为tj,并且任意两艘飞船之间不会产生任何干扰. 为了鼓励科技创新,L国国王同意小P的物流

[NOIP2015提高&amp;洛谷P2678]跳石头 题解(二分答案)

[NOIP2015提高&洛谷P2678]跳石头 Description 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石(不含起点和终 点的岩石).在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达 终点. 为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳 跃距离尽可能长.由于预算限制,组委会至多从起点和终点之间移走 M 块岩石(不能 移走起点和终点的岩石). 输入格式

NOIp2015 运输计划 [LCA] [树上差分] [二分答案]

我太懒了 吃掉了题面 题解 & 吐槽 一道很好的树上差分练习题. 不加fread勉强a过bzoj和luogu的数据,加了fread才能在uoj里卡过去. 可以发现,答案则是运输计划里花费的最大值,最大值最小,便是二分答案的标志. 那么该怎么check呢... 我们得找出所有超过限制的计划,这个过程可以在LCA倍增的过程中预处理出来. 然后再找出一些被这些计划都覆盖的边,找到最大的那条边,如果最大的计划花费减去最大的那条边小于x,那么x就是可行的. 但是该怎么找到那些被计划都覆盖的边呢... 我们

c++二分答案 之 跳石头

题目: 题目描述 Description 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有N块岩石(不含起点和终点的岩石).在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点. 为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长.由于预算限制,组委会至多从起点和终点之间移走M块岩石(不能移走起点和终点的岩石). 输入描述 Inp

二分答案入门乱讲

1.关于二分答案 如果reader没有学过二分,那么我建议您把这个网站关掉.不是我有偏见或者什么,看这篇文章对不了解二分的人来说没有好处. 对 于一些问题,它的解满足单调性,即如果x满足条件,则对于任意的 i ( 1<=i<=x) 或 (x <=i <=n) (假设1和n是答案的上下界)都会满足条件.一般遇上这种问题,我们就可以用二分答案来加快解决.这种问题常常有关键语句:使最大......最小. 对于上面的问题,在没学二分答案的时候,我们是这么写的:(假设答案是上界) for(i

【笔记】二分答案

二分答案 O(nlogm) 对一段有序的序列 每次二分,从而快速的查找.解决的问题常是"使最大值最小"或"使最小值最大". 注意:①注意二分的序列是有序的,对于无序的序列进行二分需要先排序. ②二分的区间尽可能大(给定区间左右端点+-1) ③根据题目要求,设定好check函数. ④防止死循环.↓ 模板: 1 //第一种 2 while(r-1>l) 3 { 4 int mid=(l+r)>>1; 5 if(check(mid)) l=mid; 6

浅谈二分答案的原理和相关应用

一.二分答案的原理和过程 1.适用范围: 当一个问题的解满足单调性(结果与询问数值成正相关或负相关)且待枚举数量,出现"最大值最小"或"最小值最大"等时,我们可以对答案进行二分: 2.原理: 1.在二分答案前,找出答案所在区间,即[L,R]: 2.用valid函数验证当前值的可行性: 3.迭代求解的过程中,每次计算一个mid=(L+R)/2,若valid(mid)==true时,根据单调性,选择更接近于不可能的一半区间,反之取另一半区间: 3.代码实现(以求最大值最

二分答案模板

[模板+讲解]二分答案 !阅读须知||阅读本博文前笔者认为读者已经学会(或了解)了: 1.基础语言与算法 2.标准二分法(二分思想) 3.二分查找 定义 二分答案与二分查找类似,即对有着单调性的答案进行二分,大多数情况下用于求解满足某种条件下的最大(小)值. 答案单调性 答案的单调性大多数情况下可以转化为一个函数,其单调性证明多种多样,如下: 移动石头的个数越多,答案越大(NOIP2015跳石头). 前i天的条件一定比前 i + 1 天条件更容易(NOIP2012借教室). 满足更少分配要求比满

HDU 4004 The Frog&#39;s Games(二分答案)

The Frog's Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submission(s): 10307    Accepted Submission(s): 4686 Problem Description The annual Games in frogs' kingdom started again. The most famous game