Noip2015 D2T1 跳石头
2016-10-18 12:00
316 查看
题目意思如上,求最短距离的最大值,即极小值的最大值,所以二分。
这一题,因为搬走的石头的个数不超过m就行,肯定是二分最小距离。
每次二分一个最小距离,从第一个石头到终点,如果当前石头足够跳过下一块石头,下一块石头可以移掉,最后移走的石头个数,小于m则满足要求。
如果一步可以跨到终点,如果中间的石头个数大于m,显然不满足,我们的二分答案不会到达l那么大,不需要考虑这种情况。
Codes
#include <cmath> #include <string> #include <map> #include <stack> #include <vector> #include <set> #include <queue> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> #define INF 0x3f3f3f3f #define maxn 50005 using namespace std; long long l,n,m,r,len,ans; long long d[maxn]; bool check(long long x) { int cnt=0; long long last=0; for (long long i=1;i<=n+1;i++) { if (d[i]-last<x) { cnt++; continue; } last=d[i]; } if (cnt<=m) return true; else return false; } int main(){ scanf("%lld%lld%lld",&len,&n,&m); for (long long i=1;i<=n;i++) scanf("%lld",&d[i]); d[n+1]=len; d[0]=0; l=1; r=len; ans=0; for(;l<=r;) { long long mid=(l+r)/2; if (check(mid)) ans=mid,l=mid+1; else r=mid-1; } printf("%lld",ans); return 0; }
相关文章推荐
- Noip 2015 D2T1 跳石头
- NOIP 2015 D2T1 跳石头
- POJ 3258 (NOIP2015 D2T1跳石头)
- POJ 3258 (NOIP2015 D2T1跳石头)
- 【noip 2015】跳石头
- [NOIP2015提高&洛谷P2678]跳石头 题解(二分答案)
- 【NOIP2015】洛谷2678 跳石头
- 【NOIP2015】 跳石头(二分查找)
- NOIP2015提高组 跳石头
- 洛谷P2678 跳石头(NOIp2015)
- 【NOIP2015】跳石头
- noip2015跳石头---二分答案
- uoj #148. 【NOIP2015】跳石头 二分
- NOIP 2015 提高组 复赛 day2 stone 跳石头
- NOIP2015 跳石头 二分
- NOIP 2015复赛提高组Day2 T1==Codevs 4768 跳石头
- 【NOIP2015】Day2T1 跳石头
- NOIP2015DAY2T1【跳石头】
- 【NOIP2015提高组】跳石头
- [NOIP2015] day2 T1 跳石头