UVa 12907 Pie
本文閱讀次數:次解題說明:
這一題是要找每個人可以分到的最大塊的派,且一塊派不能由不同的派組成的。所以我們可以使用二分搜來找出要的答案
範例code:
#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const int INF = 10000+10;
double area[INF];
double max_area;
int n,f;
void init(){
max_area = -INF;
}
bool bin(double test_area){
int sum = 0;
for(int i=0; i<n; i++){
sum += floor(area[i]/test_area);
}
// 主人也要算進來
return sum >= f+1;
}
void sol(){
double tmp;
cin>>n>>f;
for(int i=0; i<n; i++){
cin>>tmp;
area[i] = tmp * tmp * pi;
max_area = max(max_area,area[i]);
}
double l,r,m;
l = 0;
r = max_area;
// binary search
while (r-l>1e-5) {
m = l + (r-l)/2;
if(bin(m)) l = m;
else r = m;
}
cout<<fixed<<setprecision(4)<<m<<endl;
}
int main(int argc, char const *argv[]) {
int nc;
cin>>nc;
while (nc--) {
init();
sol();
}
return 0;
}