二分查詢-POJ 3122-Pie
阿新 • • 發佈:2018-11-19
題目連線:Pie
題目大意:
有N張餅,k個朋友,為了體面,必須把餅切割成大小一樣的k+1塊(包括主人自己),求出每個人能得到的最大餅體積。
前提:每人一塊,餅可以有剩餘
二分去暴力答案,確定下界為0,上界為最大體積的餅(每人一塊,最大可能就是餅的體積都相等,也就是每塊都是最大值)。
程式碼:
#include<stdio.h> #include<math.h> #define MAX_SIZE 100005 #define max(a,b) (a>b?a:b) #define Pi acos(-1.0) //圓周率 #define eps 1e-6 double Volume[MAX_SIZE]; int main() { int t; scanf("%d",&t); while(t--) { int N,F,ri; while(~scanf("%d%d",&N,&F)) { //printf("%lf\n",Pi); double Max=-1; for(int i=0;i<N;i++) { scanf("%d",&ri); Volume[i]=ri*ri*Pi; Max=max(Max,Volume[i]); //求出最大體積的Pie } double l=0.0,r=Max; double Mid; while(r-l>eps) { Mid=(l+r)/2; int cnt=0; for(int i=0;i<N;i++) cnt+=(int)(Volume[i]/Mid); //按mid切割(取整) if(cnt>=F+1) //能分配的人大於F+1,往上取值 l=Mid; else r=Mid; } printf("%.4lf\n",Mid); } } return 0; }