首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【杭电oj】1969 - Pie(二分)

【杭电oj】1969 - Pie(二分)

作者头像
FishWang
发布2025-08-26 18:44:30
发布2025-08-26 18:44:30
1130
举报

点击打开题目 Pie

Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8851 Accepted Submission(s): 3225 Problem Description

My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a number N of them, of various tastes and of various sizes. F of my friends are coming to my party and each of them gets a piece of pie. This should be one piece of one pie, not several small pieces since that looks messy. This piece can be one whole pie though. My friends are very annoying and if one of them gets a bigger piece than the others, they start complaining. Therefore all of them should get equally sized (but not necessarily equally shaped) pieces, even if this leads to some pie getting spoiled (which is better than spoiling the party). Of course, I want a piece of pie for myself too, and that piece should also be of the same size. What is the largest possible piece size all of us can get? All the pies are cylindrical in shape and they all have the same height 1, but the radii of the pies can be different.

Input

One line with a positive integer: the number of test cases. Then for each test case: ---One line with two integers N and F with 1 <= N, F <= 10 000: the number of pies and the number of friends. ---One line with N integers ri with 1 <= ri <= 10 000: the radii of the pies.

Output

For each test case, output one line with the largest possible volume V such that me and my friends can all get a pie piece of size V. The answer should be given as a floating point number with an absolute error of at most 10^(-3).

Sample Input

代码语言:javascript
复制
   3
3 3
4 3 3
1 24
5
10 5
1 4 2 3 4 5 6 5 4 2

Sample Output

代码语言:javascript
复制
   25.1327
3.1416
50.2655

Source

NWERC2006

题意:有 n 块蛋糕,分给 k+1 个人(加上本人),不能拼接,每个人得到的体积一样(圆柱体高为1,表面积一样即可)。问分的蛋糕最大为多少。

题解:从0 和表面积最大的那一块之间用二分,注意用 r - l 控制精度就行(1e-5才能AC)。

代码如下:

代码语言:javascript
复制
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
#define PI acos(-1.0)
int n,k;
double pie[10000+11];
bool check(double t)
{
	int ant = 0;
	for (int i = 1 ; i <= n ; i++)
	{
		ant += (int)(pie[i] / t);
		if (ant >= k)
			return true;
	}
	return false;
}
int main()
{
	int u;
	double l,r,mid;
	scanf ("%d",&u);
	while (u--)
	{
		scanf ("%d %d",&n,&k);
		k++;		//加上本人 
		l = r = 0;
		for (int i = 1 ; i <= n ; i++)
		{
			scanf ("%lf",&pie[i]);
			pie[i] = pie[i] * pie[i] * PI;
			r = max (r , pie[i]);
		}
		while (r - l > 0.00001)		//控制精度(大十倍就会WA) 
		{
			mid = (l + r) / 2.0;
			if (check(mid))
				l = mid;
			else
				r = mid;
		}
		printf ("%.4lf\n",l);
	}
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档