标签:blog io for 2014 log on c amp size
题目:有一些岛屿,分布在一条线上,问青蛙最少的能力是跳多远,可以不超过m次跳刀对岸。
分析:贪心,二分。已知能力的话,每次跳到最远即可,所以二分能力即可。
说明:2011大连网选题4。(2011-09-19 01:09)
#include <stdio.h>
#include <stdlib.h>
int Leng[ 500005 ];
int Data[ 500005 ];
int Queue[ 500005 ];
int cmp( const void* a, const void* b )
{
return *((int *)a) - *((int *)b);
}
bool greedy( int n, int m, int maxdist )
{
Queue[ 0 ] = 0;
int move = 0,save = 1;
while ( move < save ) {
int now = Queue[ move ++ ];
int dist = 0;
while ( now <= n && dist + Leng[ now ] <= maxdist )
dist += Leng[ now ++ ];
if ( now > n ) return true;
if ( dist == 0 ) return false;
Queue[ save ++ ] = now;
if ( save > m ) return false;
}
return false;
}
int main()
{
int L,n,m;
while ( scanf("%d%d%d",&L,&n,&m) != EOF ) {
for ( int i = 0 ; i < n ; ++ i )
scanf("%d",&Data[ i ]);
Data[ n ] = L;
qsort( Data, n+1, sizeof( int ), cmp );
Leng[ 0 ] = Data[ 0 ];
for ( int i = 1 ; i <= n ; ++ i )
Leng[ i ] = Data[ i ] - Data[ i-1 ];
int low = 0;
int hig = L;
int mid = (low+hig)/2;
while ( low < hig ) {
if ( greedy( n, m, mid ) )
hig = mid;
else low = mid+1;
mid = (hig+low)/2;
}
printf("%d\n",mid);
}
return 0;
}标签:blog io for 2014 log on c amp size
原文地址:http://blog.csdn.net/mobius_strip/article/details/39372725