HDU1969

记得用PI=acos(-1)反三角函数求,用一次排序,然后二分和贪心

#include<iostream>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
class Pie{
public:
double r;
double s;
};
bool Check(Pie p[], int n, int f, double x);
bool Cpm(Pie&a, Pie&b){
return a.r>b.r;
}
int main(){
Pie p[10001];
int i, n, f, Case;
double left, right, mid, pi =acos(-1);
cin >> Case;
while (Case--){
cin >> n >> f;
f++;
for (i = 0; i < n; i++){
cin >> p[i].r;
p[i].s = p[i].r*p[i].r*pi;
}
sort(p, p + n, Cpm); //按面积从小大大排序
left = 0.0, right = p[0].s; //左右边界
while (right - left>1e-5){
mid = (left + right)/2;
if (Check(p, n, f, mid))
left = mid;
else
right = mid;
}
cout <<setiosflags(ios::fixed)<<setprecision(4)<<(left+right)/2<< endl;
}
return 0;
}
bool Check(Pie p[],int n,int f, double x){//检查是否可以满足条件
int i = 0, peo = 0;
for (i = 0; i < n; i++){
peo += int(p[i].s / x);
if (peo >=f)
return 1;
}
return 0;
}

时间: 2024-10-22 13:18:05

HDU1969的相关文章

HDU1969 Pie(二分搜索)

题目大意是要办生日Party,有n个馅饼,有f个朋友,接下来是n个馅饼的半径.然后是分馅饼了, 注意咯自己也要,大家都要一样大,形状没什么要求,但都要是一整块的那种,也就是说不能从两个饼中 各割一小块来凑一块,像面积为10的和6的两块饼(饼的厚度是1,所以面积和体积相等), 如果每人分到面积为5,则10分两块,6切成5,够分3个人,如果每人6,则只能分两个了! 题目要求我们分到的饼尽可能的大! 只要注意精度问题就可以了,一般WA 都是精度问题 运用2分搜索: 首先用总饼的体积除以总人数,得到每个

*HDU1969 二分

Pie Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 10043    Accepted Submission(s): 3637 Problem Description My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I

浮点数二分答案 HDU1969

1 #include <iostream> 2 #include <cstdio> 3 #include <queue> 4 #include <cstring> 5 #include <algorithm> 6 #include <cmath> 7 8 using namespace std; 9 10 double PI=acos(-1.0); 11 double arr[10010]; 12 int n,m; 13 14 boo

HDU1969:Pie(二分)

Pie Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 59   Accepted Submission(s) : 31 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description My birthday is coming up and trad

Cable master--hdu1551(二分法)

Cable master Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2499    Accepted Submission(s): 936 Problem Description Inhabitants of the Wonderland have decided to hold a regional programming con

二分算法和三分算法

二分算法: hdu1969    PIE 题意:f+1个人分n分pie,pie只能切开不能从组,也就是说每个人拿到的必须是一个整块,不能是多个碎块.要求每个人分的的大小一样.n份pie的大小不同.目标是求出没人可能吃到的最大大小V. 分析抽象:首先条件是必须够n个人吃,要求大小一样的情况下求最大的V.关系是随着V的增大,所能support的人越少.这里有一个非递增的关系.所以而已考虑二分法.问题对精度的要求是二分法使用的关键.要求保留4位小数,所以我们统一乘上1000000来计算. #inclu

NOJ AC50记录

NOJ刷题总结 +++ HDU1969 Pie #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define P acos(-1.0) using namespace std; const int N = 10010; int n, f, a[N]; bool more_pie(double u) { i