[NOIp2015提高组]跳石头

Posted skylee的OI博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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         }
12     }
13     return w<=m;
14 }
15 int main() {
16     int l,n,m;
17     scanf("%d%d%d",&l,&n,&m);
18     int a[n+2];
19     a[0]=0;
20     a[n+1]=l;
21     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
22     n++;
23     int b,e;
24     for(b=1,e=l;b<=e;) {
25         int mid=(b+e)>>1;
26         if(check(mid,m,n,a)) {
27             b=mid+1;
28         }
29         else {
30             e=mid-1;
31         }
32     }
33     printf("%d\n",e);
34     return 0;
35 }

 

以上是关于[NOIp2015提高组]跳石头的主要内容,如果未能解决你的问题,请参考以下文章

NOIP2015提高组跳石头

JZYZOJ1452 NOIP2015_提高组Day2_1_跳石头

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

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

NOIP2015提高组Day2 T1 跳石头

2015 Noip提高组 Day2