The Frog's Games
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)Total Submission(s): 7263 Accepted Submission(s): 3482
are out. The frogs was asked to jump at most m (1<= m <= n+1) times. Now the frogs want to know if they want to jump across the river, at least what ability should they have. (That is the frog's longest jump distance).
Then n lines follow. Each stands for the distance from the starting banks to the nth stone, two stone appear in one place is impossible.
6 1 2 2 25 3 3 11 2 18
4 11
//思路:题目的的意思是求,在m次内通过河可以选择的最短跳跃距离,用二分枚举0~L内的数
重点在如何判断选择的数是否合法,其实简单模拟一下就行了(详见代码judge函数)
//其中我TLEL了几次,分别是不能while(cin>>L>>n>>m) for(k=0;k<50;++k)(修改详见代码)
AC源码:
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN=500000+10;
int L,n,m,dis[MAXN];
bool judge(int mid,int m,int num)
{
int sum=0,i=0;
while(m--)
{
sum+=mid;
while(sum>=dis[i])
{
++i;
if(i==num)
break;
}
i=i-1;
sum=dis[i];
}
if(sum>=L)
return true;
else
return false;
}
int main()
{
while(scanf("%d %d %d",&L,&n,&m)!=EOF)
{
dis[0]=0;
dis[1]=L;
int i=2;
while(n--)
cin>>dis[i++];
sort(dis,dis+i);
int a=0,b=L;
for(int k=0;k<20;++k)
{
int mid=a+(b-a)/2;
if(judge(mid,m,i))
b=mid;
else
a=mid;
}
printf("%d\n",b);
}
return 0;
}
332



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



