天天寫演算法之pie
阿新 • • 發佈:2019-02-14
題目太長了,意思是,有n個蛋糕,分給f個人,要求蛋糕不能拼接。因此就是分成f份,因此需要從最大的那個蛋糕走,還是二分的問題。
#include <iostream> #include <iomanip> #include<queue> #include<math.h> #include<algorithm> #include<string.h> #include<stdlib.h> #include<stdio.h> #include<iomanip> #include<string.h> #include<sstream> #include<string> #include<queue> #define MAX 5842 //¶¨Ò庯Êý¶Î #define repf(i,a,b) for(int i =(a);i<(b);i++) #define repfe(i,a,b) for(int i =(a);i<=(b);i++) using namespace std; double r[10010]; #define PI acos(-1.0) int n,f; bool cmp(int a,int b ) { return a>b ; } int num(double a) { long long sum = 0 ; for(int i = 0 ; i < n ; i++) { sum +=(int)(r[i]/a); } if(sum>=f) return 1 ; else{ return 0 ; } } int main() { int t; scanf("%d", &t); while (t--){ scanf("%d%d", &n, &f); f++; for (int i = 0; i < n; i++){ scanf("%lf", &r[i]); r[i]=r[i]*r[i]*PI; } sort(r,r+n,cmp); double high = r[0],low = 0 , mid ; while(high-low>0.00001) { mid=(high+low)/2; if (num(mid))low = mid; else { high = mid; } } mid = (high + low) / 2; printf("%.4f\n", mid); } return 0 ; }