其实真的没读懂这题是什么意思,读了好几遍题怎么都弄不懂它到底想让求什么的,最后还是查了解题报告,但是他们讲的题意仍是不明白,直到看了代码才似乎明白点他的意思,唉,这个英语啊!
我理解的题意:将每一个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 ; }