【luogu2678】【niop2015】跳石头 (二分)

P2678跳石头

我错了我以后一定自己多造几组数据再提交 样例都是骗人的

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define rg register
 4 const int N=50000+5,inf=1e9+7,mod=31011;
 5 int l,n,m,a[N],dis[N],mx,mn,cnt;
 6 bool use[N];
 7 inline int rd()
 8 {
 9     int x=0,w=0;char ch=0;
10     while(!isdigit(ch)) w|=ch==‘-‘,ch=getchar();
11     while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
12     return w?-x:x;
13 }
14
15 bool jud(int x)
16 {
17     for(int i=0;i<=n;i++)
18     {
19         int tot=1;
20         while(use[i+tot]) tot++;
21         while(a[i+tot]-a[i]<x)
22         {
23             tot++,cnt++;
24             use[i+tot]=1;
25             if(cnt>n) return 0;
26         }
27         i+=tot;
28     //  fh=min(fh,a[i+tot]-a[i]);
29     }
30     return 1;
31 }
32
33 int main()
34 {
35     l=rd(),n=rd(),m=rd();
36     mn=inf,a[0]=mx=0;
37     for(rg int i=1;i<=n;i++)
38     {
39         a[i]=rd();
40         mn=min(mn,a[i]-a[i-1]);mx=max(mx,a[i]-a[i-1]);
41     }
42     mx=max(l-a[n],mx);
43     int ans=0;
44     while(mn<=mx)
45     {
46         cnt=0;
47         int mid=(mx+mn)>>1;
48         memset(use,0,sizeof(use));
49         if(jud(mid)) mx=mid-1;
50         else mn=mid+1;
51     }
52     printf("%d",mn);
53     return 0;
54 }

10昏 漏洞百出

  • 打着打着就忘了是求最大的最小距离
  • 然后忘了设置跳的边界
  • 是输出左界-1 QAQ ans=mid

  都这样了我还能过样例QAQ!!!

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define rg register
 4 const int N=50000+5,inf=1e9+7,mod=31011;
 5 int l,n,m,a[N],dis[N],mx,mn,cnt;
 6 bool use[N];
 7 inline int rd()
 8 {
 9     int x=0,w=0;char ch=0;
10     while(!isdigit(ch)) w|=ch==‘-‘,ch=getchar();
11     while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
12     return w?-x:x;
13 }
14
15 bool jud(int x)
16 {
17     for(int i=0;i<=n;i++)
18     {
19         int tot=1;
20         while(use[i+tot]) ++tot;//如果被搬走了 那就到下一个石头
21         while(a[i+tot]-a[i]<x&&i+tot<=n+1)//不能跳过了
22         {
23             use[i+tot]=1;
24             tot++,cnt++;
25             if(cnt>m) return 0;
26         }
27         i+=(tot-1);//因为一次循环结束后它会+1 所得-1
28     }
29     return 1;
30 }
31
32 int main()
33 {
34     l=rd(),n=rd(),m=rd();
35     mn=inf,a[0]=mx=0,a[n+1]=l;
36     for(rg int i=1;i<=n;i++)
37     {
38         a[i]=rd();
39     //  mn=min(mn,a[i]-a[i-1]);
40     //  mx=max(mx,a[i]-a[i-1]);
41     }
42 //  mx=max(l-a[n],mx);
43     mx=l,mn=0;
44     while(mn<=mx)
45     {
46         int mid=(mx+mn)>>1;
47         memset(use,0,sizeof(use));
48         cnt=0;
49         if(jud(mid)) mn=mid+1;
50         else mx=mid-1;
51     }
52     printf("%d",mn-1);
53     return 0;
54 }

100昏 二分

原文地址:https://www.cnblogs.com/lxyyyy/p/10410332.html

时间: 2024-11-09 12:08:33

【luogu2678】【niop2015】跳石头 (二分)的相关文章

luogu P2678 跳石头 二分answer

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

NOIP2015跳石头[二分答案]

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

uoj #148. 【NOIP2015】跳石头 二分

题目链接 给n个石头, 可以移除其中的m个, 求移除之后它们之间距离的最大值. 看到最大值很容易想到二分, 我们二分距离x, 判断两个石头之间的距离是否小于x, 如果小于, 那么就移除当前的石头. #include <iostream> #include <vector> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #includ

luogu P2678 跳石头 二分答案

1 #include <cstdio> 2 using namespace std; 3 int a[51000]; 4 int len,m,n; 5 bool check(int x) 6 { 7 int last = 0; 8 int ans = 0; 9 for (int i = 1;i <= n;i++) 10 { 11 if (a[i] - last < x) 12 ans++; 13 else 14 last = a[i]; 15 } 16 if (ans > m

c++二分答案 之 跳石头

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

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

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

P2678 跳石头(二分答案)

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

[二分答案][NOIP2015]跳石头

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

[NOIP2015] 跳石头

2107. [NOIP2015] 跳石头 ★   输入文件:2015stone.in   输出文件:2015stone.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选 择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石(不含起点和终 点的岩石).在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达 终点. 为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛