跳石头|河中跳房子|NOIP2015提高组T4|二分法

提交地址:http://codevs.cn/problem/4768/

题目:

题意:自己看

思路:

1.读入各个石头数据

2.直接二分答案:

枚举一个石头i和一个石头j,要求i和j之间的距离为mid,然后删去i到j之间的石头,再将i到j之间的石头数加到ans里

然后把ans和m比较一下

然后就那么搞……

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 int main()
 8 {
 9     int L,a[50050],ans;
10     int n,m,i,j,l,r,mid,k;
11     scanf("%d %d %d",&L,&n,&m);
12     for (i=1; i<=n; i++) scanf("%d",&a[i]);
13     l=0;r=L+1;
14     a[0]=0;a[n+1]=L;
15     while (l+1<r)
16     {
17         ans=0;
18         mid=(l+r)/2;
19         i=0;
20         while (i<=n)
21         {
22             j=i+1;
23             while (j<=n+1 && a[j]-a[i]<mid) j++;
24             ans+=j-i-1;
25             i=j;
26         }
27         if (ans<=m) l=mid;
28         else r=mid;
29     }
30     printf("%d",l);
31     return 0;
32 }

跳石头

小计:

累计任务真的做的好慢啊……一月多拖到现在,是不是要开新坑给自己找找压力和动力啊…?

不喜欢把一道题目单发题解…感觉自己太弱了…

喵 喵 喵

时间: 2025-01-04 14:44:02

跳石头|河中跳房子|NOIP2015提高组T4|二分法的相关文章

Openjudge NOI题库 ch0111/10 河中跳房子|NOIP2015 day2 stone

这题同时也是NOIP2015 D2T1 跳石头 stone 原题. 总时间限制: 1000ms 内存限制: 65536kB 描述 每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石.这项激动人心的活动在一条长长的笔直河道中进行,在起点和离起点L远 (1 ≤ L≤ 1,000,000,000) 的终点处均有一个岩石.在起点和终点之间,有N (0 ≤ N ≤ 50,000) 个岩石,每个岩石与起点的距离分别为Di (0 < Di < L). 在比赛过程中,奶牛轮流从起点

洛谷-神奇的幻方-NOIP2015提高组复赛

题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K=2,3,…,N*N): 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列: 2.若(K−1)在最后一列但不在第一行,则将K填在第一列,(K−1)所在行的上一行: 3.若(K−1)在第一行最后一列,则将K填在(K−1)

刷题总结——子串(NOIP2015提高组)

题目: 题目背景 NOIP2015 提高组 Day2 T2 题目描述 有两个仅包含小写英文字母的字符串 A 和 B .现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一个新的字符串,请问有多少种方案可以使得这个新串与字符串 B 相等?注意:子串取出的位置不同也认为是不同的方案. 输入格式 第一行是三个正整数 n,m,k,分别表示字符串 A 的长度,字符串 B 的长度,以及问题描述中所提到的 k ,每两个整数之间用一个空格隔

Noip2015 提高组 Day1

T1神奇的幻方 题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K=2,3,…,N*N): 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列: 2.若(K−1)在最后一列但不在第一行,则将K填在第一列,(K−1)所在行的上一行: 3.若(K−1)在第一行最后一列,则将

[NOIP2015] 提高组 洛谷P2615 神奇的幻方

题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K=2,3,…,N*N): 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列: 2.若(K−1)在最后一列但不在第一行,则将K填在第一列,(K−1)所在行的上一行: 3.若(K−1)在第一行最后一列,则将K填在(K−1)

[NOIP2015] 提高组 洛谷P2678 跳石头

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

河中跳房子游戏

问题描述 每年,奶牛们都举办一种特殊的跳房子游戏,在这个游戏中,大家小心翼翼地在河中的岩石上跳.这个游戏在一条笔直的河中进行,以一块岩石表示开始,以另一块距离起点L单位长度的岩石表示结束 (1 <= L <= 1,000,000,000).在这两块岩石中间还有N(0 <= N <= 50,000) 块岩石,每块的位置距离起点是 Di (0 < Di < L)个单位长度. 玩这个游戏的时候,每头牛从开始的那块岩石想办法要跳到表示结束的那块岩石上.中间只能在从某块岩石跳跃到

noip2015提高组

2015的题比2014丧多了. T1--神奇的幻方--然而T1还是挺简单的--简单模拟. #include<iostream> #include<cstdio> using namespace std; int n,a[50][50],x,y; int main() { scanf("%d",&n); x=1;y=(n+1)>>1;a[x][y]=1; for(int i=2;i<=n*n;i++){ if(x==1&&

[NOIp2015提高组]跳石头

OJ题号:洛谷2678 思路:贪心+二分. 从前往后扫,一旦这个石头到上一个选的石头的距离小于二分的值就把这块石头移走. 1 #include<cstdio> 2 #include<queue> 3 bool check(int mid,int m,int n,int *a) { 4 int p=0,w=0; 5 for(int i=1;i<=n;i++) { 6 if(a[i]-p<mid) { 7 w++; 8 } 9 else { 10 p=a[i]; 11 }