[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 }

 

转载于:https://www.cnblogs.com/skylee03/p/6921364.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值