【UVA】12097 - Pie(二分枚举)

来源:互联网 发布:淘宝网led灯 编辑:程序博客网 时间:2024/05/28 06:06

由于一个人只能从一块饼上取,所以第一反应就是枚举最小Rmax 到Rmin 里面的半径,需要用二分进行筛选。

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<stack>#include<queue>#include<map>#include<set>#include<list>#include<string>#include<sstream>#include<ctime>#include<cmath>using namespace std;#define _PI acos(-1.0)#define INF 1 << 10#define esp 1e-6typedef long long LL;typedef unsigned long long ULL;typedef pair<int,int> pill;/*======================================================================================*/#define MAXD 10000 + 10double pie[MAXD];int n,m;int solve(double r){    double s = _PI * r * r;    int ans = 0;    int k;    for(int i = 0 ; i < n ; i++){        double S = _PI * pie[i] * pie[i];        k = (int)(S / s);        ans += k;    }    return ans;}int main(){    int T;    scanf("%d",&T);    while(T--){        scanf("%d%d",&n,&m);        m ++;        double L = 0,R = 0;        for(int i = 0 ; i < n ; i++){            scanf("%lf",&pie[i]);            R = max(R,pie[i]);        }        while((R - L) > 1e-8){            double mid = 1.0 * (R + L) / 2;            int  cut = solve(mid);            if(cut >= m)                L = mid;            else                R = mid;        }        printf("%.4f\n",_PI * R * R);    }    return 0;}

0 0
原创粉丝点击