题目链接:http://poj.org/problem?id=3258
题意:有一条河流,上面原来有n个石头,FJ的cow可以从这些石头上跳过去,现在FJ想训练他的cow的跳跃能力,于是乎想移去其中的m个石头,而且他要求,去掉这m个石头后,石头与石头之间的最小值必须最大。
思路:二分答案,然后验证当前答案下最少需要移去的石头数量
my ugly code:
Source Code
| Problem: 3258 | User: bingshen | |
| Memory: 324K | Time: 172MS | |
| Language: C++ | Result: Accepted |
- Source Code
#include<stdio.h> #include<algorithm> using namespace std; int dis[50005]; int n,m; int slove(int mid) { int res=0,temp=0,i,pre=0; for(i=1;i<=n;i++) { if(dis[i]-dis[pre]<mid) res++; else pre=i; } return res; } int max(int a,int b) { if(a>b) return a; else return b; } int main() { int i,left=0,right=0,mid,l; while(scanf("%d%d%d",&l,&n,&m)!=EOF) { left=99999999; right=0; for(i=1;i<=n;i++) scanf("%d",&dis[i]); dis[n+1]=l; n++; sort(dis+1,dis+n+1); for(i=1;i<=n;i++) { if(dis[i]-dis[i-1]<left) left=dis[i]-dis[i-1]; } right=l; while(left<=right) { mid=(left+right)>>1; int temp=slove(mid); if(temp>m) right=mid-1; else left=mid+1; } printf("%d/n",right); } return 0; }
POJ 3258 题解
本文提供了一道来自POJ平台的题目3258的解决方案,该题涉及训练奶牛跳跃能力的问题。通过二分查找算法确定移除石头后的最大最小间隔,确保了算法的时间效率。
266

被折叠的 条评论
为什么被折叠?



