[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提高组]跳石头的主要内容,如果未能解决你的问题,请参考以下文章