[UVALive 3635] Pie

本文介绍了一道关于将派面积切分成指定数量整块的算法题目,并给出了一种有效的解决方案:通过二分查找的方法确定能够切分的最大面积值,确保切分后的总块数大于或等于目标数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图片加载可能有点慢,请跳过题面先看题解,谢谢
1196604-20171011204030184-1527291744.png
1196604-20171011210338262-930222206.png
1196604-20171011204054277-1089723284.png

客人是要吃整块又不是吃整个。。。
所以你还不会做?
$
$
那你就可以二分一个答案 \(x\) 啊,然后看一下所有的派都用来切成面积为 \(x\) 的整块最多能切成多少块(记得要向下取整)
如果块数大于等于 \(F+1\) ,那就说明 \(x\) 合法
那你不就 \(AC\) 了嘛

//made by Hero_of_Someone
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#define db double
#define il inline
#define RG register
using namespace std;
il int gi(){ RG int x=0,q=1; RG char ch=getchar(); while( ( ch<'0' || ch>'9' ) && ch!='-' ) ch=getchar();
  if( ch=='-' ) q=-1,ch=getchar(); while(ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q*x; }
const db pi=acos(-1.0);

int T,n,f;
db S[10010],Max;

il void init(){
   n=gi(),f=gi()+1;
   for(RG int i=1;i<=n;i++){
      RG db r=gi(); S[i]=pi*r*r;
      Max=max(Max,S[i]);
   }
}

il bool ck(db x){
   RG long long s=0;
   for(RG int i=1;i<=n;i++) s+=floor(S[i]/x);
   return 0;
}

il void work(){
   RG db l=0,r=Max;
   while(r-l>1e-5){
      RG db mid=(l+r)/2.0;
      if(ck(mid)) l=mid;
      else r=mid;
   }
   printf("%.5lf\n",l);
}

int main(){ T=gi(); while(T--){ init(); work(); } return 0; }

转载于:https://www.cnblogs.com/Hero-of-someone/p/7652730.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值