`

poj 3122

 
阅读更多

题意:作者要开一个生日party,他现在拥有n块高度都为1的圆柱形奶酪,已知每块奶酪的底面半径为r不等,作者邀请了f个朋友参加了他的party,他要把这些奶酪平均分给所有的朋友和他自己(f+1人),每个人分得奶酪的体积必须相等(这个值是确定的),形状就没有要求。现在要你求出所有人都能够得到的最大块奶酪的体积是多少?

 

思路:贪心的思想+二分。复杂度为O(nlogM),M为初始时的high-low。初始状态,上界high为每个人分得奶酪的体积sum,下界low = 0(或者是最小块的奶酪)。然后二分,每次的mid值为(low+high)/ 2,然后根据mid值(估计值)遍历n块奶酪,看看这个mid值能分给多少个人,如果份数大于等于f,表示mid偏小,low = mid,反之high = mid。

 

注意的问题: 1.数据得开double,开float的话精度不够,二分时 high - low > 0.000001 会出不来,导致

               Time Limit Exceeded,而不是因为数据要求高而超时。

             2.由于精度要求特别特别高,所以PI = 3.1415926535897932 和 high - low > 0.000001 是必

               须的,也是这道题总是WA的地方。

代码如下:

#include<iostream>
using namespace std;
const int Max = 10050;
const double PI = 3.1415926535897932;

int main()
{
    int t, n, f, i;
    double pie[Max];
    scanf("%d", &t);
    while(t--)
	{
        scanf("%d%d", &n, &f);
        f++;                             //  加上作者一人。
        double sum = 0;
        for(i = 1; i <= n; i ++)
		{
            int r;
            scanf("%d", &r);
            pie[i] = r * r;
            sum += pie[i];
        }
		
        double mid, low = 0, high = sum / f;
        while(high - low > 0.000001)
		{
            mid = (low + high) / 2;
            int count = 0;                //  count为当前mid值对应的能分给的人数。
            for(i = 1; i <= n; i ++)
                count += (int)(pie[i] / mid);  
            if(count >= f) 
				low = mid;
            else high = mid;
        }
        printf("%.4lf\n", mid * PI);
    }
    return 0;
}

 

分享到:
评论

相关推荐

    POJ3122-Pie

    【标题】"POJ3122-Pie"是一道来自北京大学在线判题系统POJ(Problem Online Judge)的编程题目。这道题目通常被用于训练程序员的数据结构和算法技能,特别是解决数学问题的能力。在编程竞赛或者算法训练中,这类题目...

    POJ算法题目分类

    * 计算方法:计算方法是指解决问题的计算方法算法,如 poj3273、poj3258、poj1905、poj3122。 七、计算几何学 计算几何学是指解决问题的计算几何学算法,包括几何公式、叉积和点积的运用、多边型的简单算法和...

    poj题目分类

    * 二分法求解单调函数相关知识:例如 poj3273、poj3258、poj1905、poj3122。 计算几何学 1. 几何公式。 2. 叉积和点积的运用:例如 poj2031、poj1039。 3. 多边型的简单算法(求面积)和相关判定(点在多边型内,...

    ACM-POJ 算法训练指南

    1. **博弈论基础**:如Nim游戏策略(poj3273, poj3258, poj1905, poj3122)。 ### 九、数值分析 1. **数值方法**:包括数值积分、数值微分等(poj2031, poj1039)。 2. **数值稳定性**:关注算法的精度和稳定性...

    POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类

    - **例题**:poj3273, poj3258, poj1905, poj3122 - **解释**:概率统计问题通常涉及计算某个事件发生的概率。 ### 五、数值计算 #### 1. 数值分析 - **例题**:未列出具体题目 - **解释**:数值分析涉及数值计算...

    acm训练计划(poj的题)

    - (poj3273, poj3258, poj1905, poj3122):研究两个或多个参与者之间的决策过程。 ### 六、数值计算 1. **精度控制**: - 如何处理浮点数的精度问题。 2. **高精度运算**: - 处理大数的加减乘除等操作。 3. ...

    经典 的POJ 分类

    - POJ 1905、POJ 3122:复杂的几何计算问题。 ### 字符串处理 #### 后缀数组 - **题目示例**: - POJ 2031、POJ 1039:后缀数组的构建与应用。 #### 字典树 (Trie) - **题目示例**: - POJ 2513:Trie树的...

    POJ 分类题目

    - poj3122 - **应用场景**:适用于数值分析、方程求解等问题。 #### 七、计算几何学 **1. 几何公式** - **定义**:包括计算面积、周长等。 - **示例题目**: - poj1265 - poj1423 - **应用场景**:适用于图形...

    POJ题目分类

    - **示例题目**: poj3273, poj3258, poj1905, poj3122 ### 六、组合数学 #### 1. 组合数学 - **内容**: 包括排列组合、容斥原理等问题。 - **示例题目**: 未给出具体题目 - **知识点**: - **排列组合**:从n个...

    Poj_3122_Pie.rar_K._PIE_Pie题目

    看英文题目一开始看不大懂,下面做一下解释:本体就是作者开party然后就做了不同大小不同口味的N个Pie,现在他有k个朋友要参加这个party,但是他的朋友和他要分到相同体积的pie,pie都是圆柱形的,高度全为1....

    ACM常用算法及其相应的练习题.docx

    - poj3273, poj3258, poj1905, poj3122 七、计算几何学 * 几何公式 * 叉积和点积的运用:poj2031, poj1039 * 多边型的简单算法:poj1408, poj1584 * 凸包:poj2187, poj1113 中级部分: 一、基本算法 * C++的...

    ACM常用算法及其相应的练习题 (2).docx

    (3) 计算方法:poj3273, poj3258, poj1905, poj3122 八、计算几何学 本部分涵盖了计算几何学,包括几何公式、叉积和点积的运用、多边型的简单算法和相关判定、凸包等。 (1) 几何公式: (2) 叉积和点积的运用:poj...

    北大acm试题

    poj3252、poj1850、poj1019和poj1942等题目涉及组合数学,poj2635、poj3292、poj1845和poj2115则与数论相关,而poj3273、poj3258、poj1905和poj3122则需要使用到计算方法。 七、计算几何学 计算几何学是处理几何...

    ACM 题型

    - 示例题目:poj3273, poj3258, poj1905, poj3122 #### 字符串算法 1. **模式匹配** - 示例题目:poj2031, poj1039 2. **后缀数组** - 示例题目:poj2031, poj1039 3. **后缀自动机** - 示例题目:poj1408, ...

    ACM常用算法及其相应的练习题 (2).pdf

    例题:poj3273、poj3258、poj1905、poj3122。 七、计算几何学 * 几何公式:几何公式是指用于计算几何形状的面积、周长和体积的算法。例题:无。 * 叉积和点积的运用:叉积和点积是指用于计算几何形状的面积、周长...

    ACM 新手指南 PKU 题目分类

    - 示例题目:POJ 3273, POJ 3258, POJ 1905, POJ 3122 #### 三、总结 通过对上述知识点的学习和实践,初学者不仅能够更好地理解各种算法背后的原理,还能逐渐积累解决问题的经验。在选择题目时,建议从简单的题目...

    北大、杭电ACM试题分类

    - POJ 3273, POJ 3258, POJ 1905, POJ 3122 这些题目可能涵盖了一些较为特殊的概率统计问题,例如概率生成函数的应用等。 ### 几何学 1. **几何计算** - POJ 2031, POJ 1039 几何学问题涉及到图形的位置、大小...

    ACM题目分类.txt

    - POJ 3122 以上是对给定文件中提及的各种算法类型的详细介绍。每种算法都有其独特的应用场景和解决特定类型问题的能力。掌握这些算法不仅能够帮助解决实际问题,还能够提升编程能力,对于参加ACM竞赛或从事软件...

    算法训练方案详解

    - **示例题目**: POJ 3273, POJ 3258, POJ 1905, POJ 3122 - **注意事项**: 理解二分法的基本思想和实现细节。 #### 七、计算几何学 **1. 几何公式** - **定义**: 包括面积、周长等基本几何概念。 - **应用...

    acm新手训练方案新手必备

    - POJ 3122: 组合几何的复杂案例 #### 四、高级算法 这部分涵盖了更复杂的算法和技术,适合进阶学习。 - **线性代数**:包括矩阵运算、行列式计算等。 - **几何算法**:包括凸包、最近点对等问题。 - **计算几何...

Global site tag (gtag.js) - Google Analytics