uvalive 3635 Pie

https://vjudge.net/problem/UVALive-3635

题意:

有F+1个人要分n个蛋糕,他们得到的蛋糕的面积必须是一样的,但是每个蛋糕必须是整块的蛋糕,而不是有多块蛋糕拼成的,蛋糕的形状也可以不相同。

给出n块蛋糕各自的半径,求他们每个人能得到的蛋糕的最大面积。

思路:

使得最小值最大,那显然是二分。

二分半径,计算面积,然后枚举每个蛋糕,计算每个蛋糕可以分出来的当前面积的蛋糕会有多少个,总数是否大于等于F+1即可。

记住计算个数的时候要用floor向下取整函数,而且l从0开始枚举(因为人数可能比蛋糕个数多),r从半径的最大值开始枚举就行了。

代码:

 1 #include <stdio.h>
 2 #include <math.h>
 3 #include <algorithm>
 4 using namespace std;
 5
 6 const double pi = acos(-1.0);
 7
 8 int a[10005];
 9 int n,f;
10
11 bool meet(double r)
12 {
13     double area = pi * r * r;
14
15     long long sum = 0;
16
17     for (int i = 0;i < n;i++)
18     {
19         double one = pi * a[i] * a[i];
20
21         sum += (int)floor(one / area);
22
23         //printf("%f %f %d\n",one,area,(int)floor(one / area));
24     }
25
26     return sum >= f;
27 }
28
29 int main()
30 {
31     int t;
32
33     scanf("%d",&t);
34
35     while (t--)
36     {
37         scanf("%d%d",&n,&f);
38
39         f++;
40
41         int maxn = -1;
42
43         for (int i = 0;i < n;i++)
44         {
45             scanf("%d",&a[i]);
46
47             maxn = max(a[i],maxn);
48         }
49
50
51         sort(a,a+n);
52
53         double l = 0,r = maxn;
54
55         for (int i = 0;i < 100;i++)
56         {
57             double mid = (l + r) / 2;
58
59             if (meet(mid)) l = mid;
60             else r = mid;
61         }
62
63         printf("%.5lf\n",l * pi * l);
64     }
65
66     return 0;
67 }
时间: 2024-08-01 19:59:12

uvalive 3635 Pie的相关文章

UVALive 3635 Pie(二分法)

简单的二分法应用,循环1000次精度就满足要求了. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmath> #include<map> #include<set> #include<vector> #include<algorithm>

UVALive - 3635 - Pie(二分)

题意:有F + 1(1 <= F <= 10000)个人分N(1 <= N <= 10000)个圆形派,每个人得到的派面积相同,且必须是一整块(不能够两个甚至多个派拼在一起),求每个人最多能得到多大面积的派.(误差最多到0.001) 因为答案是小数类型的,并且N高达10000,故不可暴力枚举. 可以二分枚举最大面积,然后检查是否切出来派的总个数大于等于F + 1. (判相等时不可直接判相等,需要加精度控制) #include<cstdio> #include<cs

LA 3635 - Pie 【二分】

Regionals 2006 >> Europe - Northwestern 3635 - Pie Time limit: 3.000 seconds 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 com

LA 3635 Pie

二分答案 找到最大的圆的面积作为每个人可能分到的最大的面积. 对每个人可能分到的面积二分 验算时,求出每个pie可以切出的最大块数,然后总的块数和需要的块数比较 PS:(就是精度恶心) #include <map> #include <cmath> #include <cstdio> #include <vector> #include <string> #include <cstring> #include <algorith

Uva 派 (Pie,NWERC 2006,LA 3635)

依然是一道二分查找 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 using namespace std; 5 6 const double PI=acos(-1.0); 7 int N,F; 8 double r[10001]; 9 10 bool ok(double area) 11 { 12 int sum=0; 13 for(int i=0;i<N;i++) 14 sum+=floo

UVALive 4848 Tour Belt

F - Tour Belt Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVALive 4848 Description Korea has many tourist attractions. One of them is an archipelago (Dadohae in Korean), a cluster of small islands sca

UVALive 6467 Strahler Order 拓扑排序

这题是今天下午BNU SUMMER TRAINING的C题 是队友给的解题思路,用拓扑排序然后就可以了 最后是3A 其中两次RE竟然是因为: scanf("%d",mm); ORZ 以后能用CIN还是CIN吧 QAQ 贴代码了: 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <iostre

Designing CSS Layouts With Flexbox Is As Easy As Pie

This article is an updated excerpt of the chapter "Restyle, Recode, Reimagine With CSS3″ from our Smashing Book #3, written by Lea Verou and David Storey. - Ed. Flexible box layout (or flexbox) is a new box model optimized for UI layout. As one of th

PIE使IE支持CSS3圆角盒阴影与渐变渲染

PIE使IE支持CSS3圆角盒阴影与渐变渲染 http://css3pie.com/download/