POJ 3122 (集训比赛2B_B题)解题报告

题目链接:http://poj.org/problem?id=3122

--------------------------------------------------------

题意:每人只能从一个派里面切割,要求每个人的派的面积相等,求这个最大面积。

思路:二分法,下限是所有人从最小的里面切割,上限是所有派都完全分割。每次进行二分,判断解是否可行,通过可行性,对上下限进行调整,最终得到结果。

代码:

#include <cstdio>
#include <cmath>

int N =0;
int F=0;
double pim =0;
double sum=0;
const int MAXN =10000+10;
double r[MAXN];
double pie[MAXN];

const double PI =acos(-1.0);
const double eps=1e-6;

int jud(double mid){
    int count=0;
    for(int i=0;i<N;i++){
        count+=(int)(pie[i]/mid);
    }
    if(count>=(F+1))    return 1;
    else return  0;
}
double proce(){
    double left =pim/(F+1);
    double right=sum/(F+1);
    double mid= (left+right)/2;
    while(right-left>eps){
        mid= (left+right)/2;
        if (jud(mid)){
            left = mid;
        }else{
            right =mid;
        }
    }

    return mid;
}

int main(void){
    int T=0;
    scanf("%d",&T);

    for(int i=0;i<T;i++){
        pim=0;
        sum=0;
        scanf("%d %d",&N,&F);
        for(int j=0;j<N;j++){
            scanf("%lf",&r[j]);
            pie[j]=PI*r[j]*r[j];
            if(pie[j]>pim)    pim=pie[j];
            sum+=pie[j];
        }
        double ans = proce();
        printf("%.4f\n",ans);
    }

    return 0;
}

原文地址:https://www.cnblogs.com/caomingpei/p/8362035.html

时间: 2024-10-29 19:10:42

POJ 3122 (集训比赛2B_B题)解题报告的相关文章

08年acm区域赛北京赛区 部分题解题报告

08年区域赛北京赛区 http://poj.org/searchproblem?field=source&key=Beijing+2008 POJ 3921 Destroying the bus stations 题目还是比较难的,当时的榜似乎只有4/25的通过/提交,其实题目数据很水.学长转换模型写了网络流求最小割,可以AC,不过自己造了个数据推翻了正确性.我写了个很挫的bfs套bfs,外层是最小的删除点数,内层是求最短路,数据很水可以AC.但比较蛋疼的在于bfs耗内存,而且队列中的点数是阶乘

最小生成树,POJ和HDU几道题目的解题报告(基于自己写的模板)

首先POJ题目: 链接:1251 Jungle Roads 题目大意:纯求最小生成树,结果为最小权值边的和.采用邻接表 代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <vector> 4 #include <queue> 5 using namespace std; 6 7 #define maxn 30 //最大顶点个数 8 int n; //顶点数,边数 9 10 struct arcn

poj 1094 Sorting It All Out 解题报告

题目链接:http://poj.org/problem?id=1094 题目意思:给出 n 个待排序的字母 和 m 种关系,问需要读到第 几 行可以确定这些字母的排列顺序或者有矛盾的地方,又或者虽然具体的字母顺序不能确定但至少不矛盾.这些关系均是这样的一种形式: 字母1 < 字母2 这道题目属于图论上的拓扑排序,由于要知道读入第几行可以确定具体的顺序,所以每次读入都需要进行拓扑排序来检验,这时每个点的入度就需要存储起来,所以就有了代码中memcpy 的使用了. 拓扑排序的思路很容易理解,但写起来

圆锥曲线:椭圆小题解题报告

圆锥曲线:椭圆小题解题报告 注意事项: 由于本人水平有限,部分题目解题方法可能非最优解,如有更好方法欢迎在评论区指正. 部分题目讲解可能过于口语化,导致并不符合官方(人教版教材)的要求,请各位在考试中不要学习,使用正确的,符合要求的用语. 本文中可能存在错别字,望发现者在评论区指正. 本篇博客是为记录本人在完成学校作业的过程中遇到的问题,同时给部分同学作为解题参考用. 本篇博客中绘制图像的工具是geogebra. 1~10题: 1 题目: 已知F~1~,F~2~是椭圆\(x^2/4+y^2/3=

2016.8.27一套简单的题解题报告

一套不错的题,需要相关资料的联系我咯 考试分析: 1.  由于题目的名字加上第一道题没读完时我以为是我最不擅长的treeDP(其实不得不说,树和图上的题我真的是不想写,一般都写不对,上课太不认真,这个弱点要加强训练),我直接跳到了最后一道题,明知考3h还用了30min去分析,不过还是感谢,这30min救了我两道题出来: 这套题的确还是比较简单,后两道题只要认真分析数据都不会有问题,也许是因为暑假切了贪心和递推,我对分析数据比较在行,第三题切完之后还有2h,不过没写高精的我有点慌,打算最后留一点时

POJ 1905(集训比赛2B_A题)解题报告

题目链接:http://poj.org/problem?id=1905 --------------------------------------------------------- 题意:一个线段,给出长度.加热温度及热膨胀系数,线段加热后变为圆弧的一部分,要求求弧顶长度为多少. 思路:简单的画一下图,发现几何关系还是比较明确的,但是发现x的数学表达式并不容易解出来,所以采用二分法求值的方法.选择二分的对象很重要,直接选择对要求的x进行二分,避免角度误差太大. 代码: #include <

CodeForces 551C(集训比赛2B_C题)解题报告

题目链接:http://codeforces.com/problemset/problem/551/C --------------------------------------------------------------------------------- 题意:有n个地点,每个地点有箱子,然后有一定人数,每个人从第i个位置移动到第i+1的位置花费1S,每个人移动一个箱子花费1S,要求把所有箱子全部移除花费的最小时间是多少 思路:二分+贪心的思想,每次对一名学生进行判断.对所求时间进行

CQOI2015 后3题解题报告

这个嘛= =,CQOI我只做了后面3题(前面两题老师还没考就还不敢写= =)说一下被虐报告吧= = T3:[CQOI2015]任务查询系统 描述:戳我~~~ 这道题首先很明显是道裸的数据结构题啦.首先他要求在线,那么按顺序建个函数式线段树就行啦 自己太弱调了好久= = CODE: 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 #inclu

Codeforces Round #256 (Div. 2/A)/Codeforces448A_Rewards(水题)解题报告

对于这道水题本人觉得应该应用贪心算法来解这道题: 下面就贴出本人的代码吧: 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 5 int a[3],b[3]; 6 7 int main(void) 8 { 9 int n; 10 int need = 0; 11 int sum1 = 0,sum2 = 0; 12 for(int i=1;i<=3;++i){ 13 scanf("%d&q