首页 > 其他分享 >SP1837 PIE - Pie 题解

SP1837 PIE - Pie 题解

时间:2023-08-17 22:55:55浏览次数:61  
标签:二分 int 题解 PIE mid SP1837 double check

题目链接

思路

一道简单二分答案题。

对于每个确定的派的体积,设置左边界 \(l\)、右边界 \(r\) 和尝试值 \(mid\),用 \(\operatorname{check}\) 函数返回在每份有 \(mid\) 那么多派的情况下,可以分成几份。将这些结果加起来,与应分人数进行比较,如果份数小于人数,证明每一份分的太多了,将 \(r\) 的值变为 \(mid\);反之,则代表可能不是最优解,将 \(l\) 的值变为 \(mid\)。

注意

  • 精度问题,使用 cmath 库内的 M_PI 函数 解决。
  • 需要分到的人数是朋友数加上我自己,即朋友数加 \(1\)。
  • 有多组测试点,每次都应输出结果并换行。

参考代码(请勿抄袭):

#include<bits/stdc++.h> //包含cmath库 
using namespace std;
int t,n,f,b;//几个问题、派的数量、朋友的数量、派的半径 
double l,r; //二分必备
double v[10010]; //每个派的体积 

int check(double a){//获取每份需要mid那么多,能分成几份 
	int s=0;
	for(int i=1;i<=n;i++){//判断每个派能分给多少个朋友 
		s=s+(int)(v[i]/a);//将答案强转int类型 
	}
	return s;//返回s 
}
int main(){//主函数部分 
	cin>>t;
	while(t--){
		r=0,l=0;//r和l初始化 
		cin>>n>>f;
		f++;//我自己也算 
		for(int i=1;i<=n;i++){
			cin>>b;
			v[i]=M_PI*b*b;//省略了乘1 
			r=max(r,v[i]);//r取最大值 
		}
		r+=0.001;//精度 
		while(r-l>0.0001){//二分,0.0001是卡精度 
			double mid=(l+r)/2;//中间值 
			int k=check(mid);//获取check函数返回的值,用k储存 
			if(k<f){//给的太多了,不够分 
				r=mid;//右边界左移 
			}
			else l=mid;//可能不是最优解,那么左边界右移 
		}
		printf("%.4lf\n",l);//二分结束,直接输出l 
	}
	return 0;
}

标签:二分,int,题解,PIE,mid,SP1837,double,check
From: https://www.cnblogs.com/CodeFishHp/p/17639124.html

相关文章

  • CF1762D GCD Queries 题解
    题面给定一个长度为\(n\)的排列\(0,1,\cdots,n-1\)。可以进行最多\(2n\)次询问,每次询问给出两个下标\(i,j\),交互器会返回\(\gcd(p_i,p_j)\)。询问以后,需要输出两个下标\(x,y\),满足\(p_x=0\lorp_y=0\)。特别地,\(\gcd(0,x)=x\)。题解观察次数限制,我们......
  • 题解 石头剪刀布
    plaesekillme.&&don'tforgetme.题目描述给定\(n\)个字符串\(s_i\)只包含0,1,2,现在要捏一个序列\(A\),\(s_i\)表示\(a_i\)可以捏成什么。1,2,3形成环形吊打关系,\(\omega(X)\)表示序列\(X\)最长的吊打子序列,吊打序列指的是对于\(a_{p_1},\dots,a_{p_k}\),除了......
  • CF1787E The Harmonization of XOR 题解
    CF1787ETheHarmonizationofXOR题目大意给定\(n\)个数\([1,2,3,\cdots,n]\)和两个正整数\(k\)和\(x\)。将这些数分成恰好\(k\)组使得每组的异或和都是\(x\)。(\(1\lek\len\le2\cdot10^5,1\lex\le10^9\))。题解首先,我们知道,如果我们无法从\(n\)......
  • CF1787E The Harmonization of XOR 题解
    题面将集合\(\left\{1,2,\cdots,n\right\}\)划分为\(k\)个非空不交子集,使得每个子集的异或和均为\(x\)。(\(1\len,k\le2\times10^5\))。题解首先显而易见的判断一下无解的情况,记\(sum=\bigoplus\limits_{i=1}^{n}i\),如果\(k\)为奇数但\(sum\neqx\)或......
  • CF803C Maximal GCD 题解
    题意构造一个长度为\(k\),和为\(n\)的严格单调递增序列,并最大化其最大公约数。(\(1\len,k\le10^{10}\))题解首先可以发现一个事实,这个序列的最大公约数一定为\(n\)的因子。所以我们可以考虑枚举\(n\)的所有因子并判断其能否成为整个序列的最大公约数。假设我们现在枚......
  • 【题解】#373. 「USACO1.1」Friday the Thirteenth 题解(2023-07-19更新)
    #373.「USACO1.1」FridaytheThirteenth题解本文章的访问次数为次。Part1提示题目传送门欢迎大家指出错误并私信这个蒟蒻欢迎大家在下方评论区写出自己的疑问(记得@这个蒟蒻)Part2背景这个蒟蒻又一次写了一篇大水题的题解(话说为什么是又),当然也是为了纪念他的\(......
  • 【题解】#68. 「NOIP2004」津津的储蓄计划 题解(2023-07-19更新)
    #68.「NOIP2004」津津的储蓄计划题解本文章的访问次数为次。Part1提示题目传送门欢迎大家指出错误并私信这个蒟蒻欢迎大家在下方评论区写出自己的疑问(记得@这个蒟蒻)Part2背景这是这个蒟蒻的第一篇题解,也是这个蒟蒻对自己的\(50\)AC的纪念。Part3更新日志......
  • 算法题解之罗马数字智力游戏
    题目描述牛牛和朋友在玩耍时发现了一款关于罗马数字的智力游戏。在这个游戏中,他们首先需要将一个给定的整数num转换为对应的罗马数字。但是,他们发现,当他们每次转换后的结果字符串长度达到了一个阈值limit时,他们需要将字符串反转。请编写一个函数,将给定的整数num转换为对应的......
  • [JOISC 2014 Day3] 电压 题解
    题面给定\(n\)个点\(m\)条边的无向图。现在要对每个点黑白染色。若能够使一条边连接的两点颜色相同,其他边连接的两点颜色不同,则这条边合法。求合法的边数。$2\leqn\leq10^5,1\leqm\leq2\times10^5$。图可能不连通,不保证没有重边。题解首先考虑转化一下题目......
  • P3780 [SDOI2017] 苹果树 题解
    DescriptionP3780[SDOI2017]苹果树给定一棵\(n\)个点的树,每个点有若干个价值相同的苹果,儿子能摘至少一个仅当父亲被摘至少一个。给定\(k\),设\(h\)为你摘的苹果的最大深度,你做多能摘\(k+h\)个,求最大价值。对于所有数据,\(1\len\le5\times10^4\),\(1\lek\le5\time......