poj 3122 Pie

其实真的没读懂这题是什么意思,读了好几遍题怎么都弄不懂它到底想让求什么的,最后还是查了解题报告,但是他们讲的题意仍是不明白,直到看了代码才似乎明白点他的意思,唉,这个英语啊!

我理解的题意:将每一个Pie都要平均分成x份,所有的x加起来要大于等于朋友数f。

思路:二分,将最大的一份pie平均分f份,这当然包括他自己,作为二分查找的下限,将所有pie平均分成f份,作为二分查找的上限。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <string>
#include <math.h>
#define INF 0xffff
#define maxm 10005
#define esp 1e-6
using namespace std ;

double pi = acos ( -1.0 );
double v[maxm] ;

int main()
{
    int cas , n , f , i , x , s ;
    double low , high , mid , maxx , sum ;

    scanf ( "%d" , &cas ) ;
    while ( cas-- )
    {
        scanf ( "%d%d" , &n , &f ) ;
        f++ ;
        maxx = sum = 0.0 ;
        for ( i = 0 ; i < n ; i++ )
        {
            scanf ( "%d" , &x ) ;
            v[i] = x * x * pi ;
            if ( v[i] > maxx )
            maxx = v[i] ;
            sum += v[i] ;
        }
        low = maxx / f ;
        high = sum / f ;
        while ( high - low > esp )
        {
            mid = ( high + low ) / 2 ;
            for ( i = 0 , s = 0 ; i < n ; i++ )
            s += floor ( v[i] / mid ) ;
            if ( s < f )
            high = mid ;
            else
            low = mid ;
        }
        printf ( "%.4lf\n" , low ) ;
    }
    return 0 ;
}
posted @ 2012-06-28 11:43  Misty_1  阅读(152)  评论(0编辑  收藏  举报