您的位置:首页 > 其它

uvalive 3635(贪心)

2014-09-26 16:56 387 查看
题意:过生日分蛋糕,有f个朋友,要求把n块蛋糕切开分给朋友和自己,每个人得到的蛋糕体积要相等,且每个人都只分一块,输出每个人能得到的最大的蛋糕的体积(可以有剩余)。

题解:结果一定是从0到最大蛋糕体积中间的某个数字,所以直接二分寻找看分出来的蛋糕是否够f + 1个人分。(好像π一定要用 PI = acos(-1.0)代替,直接3.141592654...会wa)。

#include <stdio.h>
#include <string.h>
#include <math.h>
const int N = 10006;
const double PI = acos(-1.0);

int n, f, t;
double v
, r, l, mid, a;

bool judge() {
int num = 0;
for (int i = 0; i < n; i++)
num += v[i] / mid;
if (num >= f + 1)
return true;
return false;
}

int main() {
scanf("%d", &t);
while (t--) {
scanf("%d%d", &n, &f);
r = l = 0;
for (int i = 0; i < n; i++) {
scanf("%lf", &a);
v[i] = a * a * PI;
r = r < v[i] ? v[i] : r;
}
while (r - l > 1e-5) {
mid = (r + l) / 2;
if (judge())
l = mid;
else
r = mid;
}
printf("%.4lf\n", mid);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva 贪心