acm课程练习2--1003

题目描述

My birthday is coming up and traditionally I’m serving pie. Not just one pie, no, I have a number N of them, of various tastes and of various sizes. F of my friends are coming to my party and each of them gets a piece of pie. This should be one piece of one pie, not several small pieces since that looks messy. This piece can be one whole pie though.

My friends are very annoying and if one of them gets a bigger piece than the others, they start complaining. Therefore all of them should get equally sized (but not necessarily equally shaped) pieces, even if this leads to some pie getting spoiled (which is better than spoiling the party). Of course, I want a piece of pie for myself too, and that piece should also be of the same size.

What is the largest possible piece size all of us can get? All the pies are cylindrical in shape and they all have the same height 1, but the radii of the pies can be different.

Input

One line with a positive integer: the number of test cases. Then for each test case:
—One line with two integers N and F with 1 <= N, F <= 10 000: the number of pies and the number of friends.
—One line with N integers ri with 1 <= ri <= 10 000: the radii of the pies.

Output

For each test case, output one line with the largest possible volume V such that me and my friends can all get a pie piece of size V. The answer should be given as a floating point number with an absolute error of at most 10^(-3).

Sample Input

33 34 3 31 24510 51 4 2 3 4 5 6 5 4 2

Sample Output

25.13273.141650.2655

题目大意

有F+1个人分N块蛋糕,每人只能分一块,且每人分到的大小必须相等

思路

随着分的蛋糕面积的增大,能分成的块数递减(注意,这不是一个线性的函数关系,因为蛋糕不能重新组合,所以会出现一块蛋糕切出相同面积的几块后,由于剩余面积不及前几块大,只能舍弃剩余面积的情况。这也是为什么不能简单地用总面积除以人数的原因)

由于有以上的逆序递减关系,因此可以用二分法来找出解。

这是一道二分法的水题。

AC代码

  1. #include<iostream>
  2. #include<cmath>
  3. #include<iomanip>
  4. #include<stdio.h>
  5. #define max(a,b) (((a)>(b))?(a):(b))
  6. using namespace std;
  7. const double pi=acos(-1.0);
  8. int main(){
  9. //freopen("date.in","r",stdin);
  10. //freopen("date.out","w",stdout);
  11. int N,T,renshu,tem1,sum;
  12. cin>>T;
  13. double maxMian,tem2,low,up;
  14. double mianji[10001];
  15. while(T--){
  16. up=0;
  17. cin>>N>>renshu;
  18. renshu++;
  19. for(int i=0;i<N;i++){
  20. cin>>tem1;
  21. mianji[i]=pi*tem1*tem1;
  22. up=max(mianji[i],up);
  23. }
  24. low=0;
  25. sum=0;
  26. while(up-low>1e-6){
  27. sum=0;
  28. tem2=(up+low)/2;
  29. for(int j=0;j<N;j++){
  30. sum+=((int)(mianji[j]/tem2));
  31. }
  32. if(sum>=renshu) low=tem2;
  33. else up=tem2;
  34. }
  35. cout<<fixed<<setprecision(4)<<tem2<<endl;
  36. }
  37. }

来自为知笔记(Wiz)

时间: 2024-10-26 20:01:55

acm课程练习2--1003的相关文章

ACM课程学习总结

ACM课程学习总结报告 通过一个学期的ACM课程的学习,我学习了到了许多算法方面的知识,感受到了算法知识的精彩与博大,以及算法在解决问题时的巨大作用.此篇ACM课程学习总结报告将从以下方面展开: 学习ACM算法知识之前的具备的知识基础 学习过程及知识梳理 心得体会及收获 一,学习ACM算法知识之前具备的知识基础 在开始这一学期的课程之前,大一上学期及寒假期间我学习了C++标准库中的STL,了解了一些通用操作,各种类型的容器的特性,以及一些算法.关于算法,只学习了一些简单的遍历,递归.并未深入学习

acm课程总结报告

本学期的选修课ACM程序设计进入尾声,首先要总结的当然是感谢老师这类的客套话,良心话是真的谢谢费老耐心认真的教学,确实学到了很多东西,这一点从数据结构这门课的学习中容易看出,轻松很多. 本学期总共学习里四个专题:第一讲贪心算法,第二讲搜索,第三讲动态规划以及现在正在 努力做的图.下面我将以这四个专题为基础分别讲解ACM中所获得知识内容,感悟. 专题一贪心算法. 贪心算法包括计算活动安排的贪心算法,背包问题,删数问题.他的理论基础有三点,1,在问题的每一步选择中都采取在当前状态下最好或者最优的选择

Acm课程总结

ACM课程总结 一个学期又过去了,这个学期的ACM是我觉得最难的学科,尽管最难,但是我觉得最有用的还是它了,虽然并没有掌握这四个专题,但是在做题的过程中对于思维的锻炼确实是非常有用的,受益匪浅.对于这一篇课程总结,我将从这四个专题去进行总结,这其中有什么不对的地方还望老师予以指正.现在对图的印象最深,先从图说起吧. 图的有关算法 这这个专题里面我们主要是跟图打交道.在整个大二,可以说一直都在和图打交道,离散数学离不开图,数据结构离不开图,acm当然也离不开图.图真的是非常重要啊,它深入到我们生活

华东交通大学2017年ACM“双基”程序设计竞赛 1003

Problem Description 有两个球在长度为L的直线跑道上运动,两端为墙.0时刻小球a以1m/s的速度从起点向终点运动,t时刻小球b以相同的速度从终点向起点运动.问T时刻两球的距离.这里小球与小球.小球与墙的碰撞均为弹性碰撞,所有过程没有能量损失. Input 先输入一个q,代表q组数据,然后每组3个整数 L,t,T.1<=L<=1000;0<=t<=1000;t<=T<=1000; Output 一个整数,代表答案. Sample Input 2 10 4

ACM—课程总结

还记得是在王鲁老师的学习交流群了看到他帮费老师发的广告才关注到这门课,后来看到学分3.5,这诱惑真心大~然后想也没想就选上了.当我意识到我的选择意味着什么的时候费老师又给了我一次放弃的机会,然而我最后选择了坚持下去,挑战自己!一学期下来,感觉收获是很大很大的,不仅局限在知识方面很多方面都得到了锻炼.所以也是真心的觉得这课选的很值.废话不多说~下面来总结下这学期学习的内容.   第一专题:贪心算法 这一专题的题目做了不少,但似乎对贪心的感念依然有些模糊,下面简单写下我的理解. 一.概述 所谓贪心算

华东交通大学2015年ACM“双基”程序设计竞赛1003

Problem C Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 225   Accepted Submission(s) : 20 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description <炉石传说:魔兽英雄传>(Hearthstone:

acm课程练习2--1013(同1014)

题目描述 There is a strange lift.The lift can stop can at every floor as you want, and there is a number Ki(0 <= Ki <= N) on every floor.The lift have just two buttons: up and down.When you at floor i,if you press the button "UP" , you will go

acm课程练习2--1002

题目描述 Now, here is a fuction:  F(x) = 6 * x^7+8x^6+7x^3+5x^2-yx (0 <= x <=100)Can you find the minimum value when x is between 0 and 100. Input The first line of the input contains an integer T(1<=T<=100) which means the number of test cases. T

acm课程练习2--1001

题目描述 Now,given the equation 8x^4 + 7x^3 + 2x^2 + 3x + 6 == Y,can you find its solution between 0 and 100;Now please try your lucky. Input The first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines