poj 3122 hdu 1969 Pie

简介: 点击打开链接poj 3122 点击打开链接hdu' 1969 思路:二分 分析: 1 题目说的是有n块圆形的饼,饼的高度都是1但是半径不一定相同。

点击打开链接poj 3122

点击打开链接hdu' 1969


思路:二分
分析:
1 题目说的是有n块圆形的饼,饼的高度都是1但是半径不一定相同。现在有f+1个人(算上自己),想要平均分得一块面积相同的饼,必须是一块不能够是组合起来的,问这f+1个人能够分到的最大的面积是多少
2 很明显的二分ans,然后对n块饼进行判断,利用二分逼近的思想求出ans
3 注意这样一题的精度要求很高,pi = 3.1415926535898,还有eps不能取太小会TLE。

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

#define MAXN 10010
#define pi 3.1415926535898
#define eps 1e-6

int t , N , F;
double sum;
double r[MAXN];

void solve(){
   double left , right , mid;
   left = 0;
   right = 1.0*(pi*sum)/F;
   while(right-left > eps){
      mid = left+(right-left)/2.0;
      
      int count = 0;
      for(int i = 0 ; i < N ; i++){
         double s = pi*r[i]*r[i];
         int tmp = s/mid;
         count += tmp;
      }
      if(count < F)
         right = mid;
      else
         left = mid;
   }
   printf("%0.4lf\n" , right);
}

int main(){
   scanf("%d" , &t); 
   while(t--){
      scanf("%d%d" , &N , &F);
      sum = 0;
      F++;
      for(int i = 0 ; i < N ; i++){
          scanf("%lf" , &r[i]);
          sum += r[i]*r[i];
      }
      solve();
   }
   return 0;
}





#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const double eps = 1e-6;
const double PI = 3.1415926535898;
const int MAXN = 10010;
int n , numFriend;
struct pie{
    double r;
    double size;
};
pie p[MAXN];

bool judge(double s){
     int cnt = 0;
     for(int i = 0 ; i < n ; i++)
         cnt += p[i].size/s;
     return cnt >= numFriend+1 ? true : false;
}

double solve(double Min , double Max){
     double left , right , mid;
     left = Min , right = Max;
     while(right-left > eps){
         double mid = left+(right-left)/2;
         if(judge(mid))
            left = mid;
         else
            right = mid;
     }
     return left;
}

int main(){
    int Case , pos;
    double Min , Max;
    scanf("%d" , &Case);
    while(Case--){
        scanf("%d%d" , &n , &numFriend);
        Max = 0.0 , Min = 1>>30;
        for(int i = 0 ; i < n ; i++){
            scanf("%lf" , &p[i].r);
            p[i].size = PI*p[i].r*p[i].r;
            Max = max(Max , p[i].size);
            Min = min(Min , p[i].size);
        }
        printf("%.4lf\n" , solve(Min , Max)); 
    }
    return 0;
}




目录
相关文章
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
216581 68
|
SQL 关系型数据库 PostgreSQL
|
前端开发 easyexcel Java
Java+EasyExcel实现文件导入导出,导入导出如此简单
项目中需要Excel文件的导入与导出Excel并下载,例如,导入员工信息,导出员工信息,手动输入比较繁琐,所以本篇博文教大家如何在Java中导入Excel文件与导出Excel文件
14853 3
Java+EasyExcel实现文件导入导出,导入导出如此简单
|
11月前
|
存储 前端开发 Java
Java后端如何进行文件上传和下载 —— 本地版(文末配绝对能用的源码,超详细,超好用,一看就懂,博主在线解答) 文件如何预览和下载?(超简单教程)
本文详细介绍了在Java后端进行文件上传和下载的实现方法,包括文件上传保存到本地的完整流程、文件下载的代码实现,以及如何处理文件预览、下载大小限制和运行失败的问题,并提供了完整的代码示例。
4054 2
成功解决:Failed to load resource: net::ERR_FILE_NOT_FOUND
这篇文章提供了解决"Failed to load resource: net::ERR_FILE_NOT_FOUND"错误的步骤,通过修改配置文件中的资源路径设置为相对路径"./"来成功运行打包后的项目。
成功解决:Failed to load resource: net::ERR_FILE_NOT_FOUND
|
前端开发
Request method ‘POST‘ not supported。 Failed to load resource: net::ERR_FAILED
这篇文章讲述了在前后端分离的项目中,由于前端错误地使用了GET请求方法而不是支持的POST,导致请求被后端拒绝的问题,并提供了相应的解决方法和HTTP方法的CRUD映射知识。
Request method ‘POST‘ not supported。 Failed to load resource: net::ERR_FAILED
|
JavaScript 前端开发 安全
【Vue3 + Vite】6个非常强大的后台管理项目!开源且免费!
【Vue3 + Vite】6个非常强大的后台管理项目!开源且免费!
|
安全 Java 数据库
使用`Class.forName`动态加载类
使用`Class.forName`动态加载类
|
Java 数据库连接 网络安全
已解决 IDEA Maven 项目中 “Could not find artifact“ 问题的常见情况和解决方案
已解决 IDEA Maven 项目中 “Could not find artifact“ 问题的常见情况和解决方案
14588 0