题解【UVA12097】Pie
题目描述
输入格式
输出格式
输入输出样例
输入样例#1
3
3 3
4 3 3
1 24
5
10 5
1 4 2 3 4 5 6 5 4 2
输出样例#1
25.1327
3.1416
50.2655
题意简述
题目描述
有\(F+1\)个人来分\(N\)个圆形派,每个人得到的必须是一整块派,而不是几块拼在一起。而且派的面积要相同。求每个人最多得到多大面积的派(不必是圆形)
输入格式
输入的第一行为数据组数\(T\)。
每组数据的第一行为两个整数\(N\)和\(F(1<=N,F<=10000)\);
第二行为\(N\)个整数\(r_i(1<=r_i<=10000)\),即各个派的半径。
输出格式
对于每组数据,输出每个人得到的派的面积的最大值,精确到\(10^{-3}\)。
题解
此题可以使用二分答案的方法,
把问题转换成“是否每个人都可以得到一块面积为\(x\)的派”。
这样的转换就使问题增加了一个条件。
求解的目标就变成了“这一些条件是不是矛盾”。
如果有矛盾,是怎样的矛盾呢?
只有一种矛盾:\(x\)太大,满足不了所有的\(F+1\)个人。
这样,我们就只需要计算一共可以切多少份面积为\(x\)的派,
然后看一看这个数目够不够\(F+1\)即可。
由于派不可以拼起来,
因此一个半径为\(r\)的派就只可以切出\(\lfloor \frac{\pi \times r^{2}}{x} \rfloor\) 个派,
其余的部分就只能浪费了。
然后把所有能切出来的份数相加即可。
代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cctype>
using namespace std;
inline int gi()
{
int f = 1, x = 0; char c = getchar();
while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar();}
while (c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar();}
return f * x;
}
const double pi = acos(-1.0), eps = 1e-4;
int n, m, t;//m即为题意中的F
double a[10003], ans;
inline bool check(double mian)//二分答案的判断函数
{
int cnt = 0;
for (int i = 0; i < n; i++)
{
cnt = cnt + floor(a[i] / mian);//加上能拼成的块数
}
return cnt > m;//判断是否大于等于m+1
}
int main()
{
t = gi();
while (t--)//多组数据
{
n = gi(), m = gi();
double p = -1;
for (int i = 0; i < n; i++)
{
int R = gi();
a[i] = pi * R * R, p = max(p, a[i]);//计算每份派的面积及最大派的面积
}
double l = 0, r = p;
while ((r - l) > eps)//开始二分答案
{
double mid = (l + r) / 2;
if (check(mid))
{
l = mid;
}
else
{
r = mid;
}
}
printf("%0.4lf\n", l);//输出
}
return 0;//结束
}
题解【UVA12097】Pie的更多相关文章
- 【题解】PIE [POI2015] [P3585]
[题解]\(PIE\) \([POI2015]\) \([P3585]\) 逼自己每天一道模拟题 传送门:\(PIE\) \([POI2015]\) \([P3585]\) [题目描述] 一张 \(n ...
- 题解报告:hdu 1969 Pie(二分)
Problem Description My birthday is coming up and traditionally I'm serving pie. Not just one pie, no ...
- 题解【Codeforces859C】Pie Rules
题面 一道需要一定思考的 \(\text{DP}\) . 设 \(dp_i\) 表示第 \(i\) 步走的人能得到的最大分数, \(sum_i\) 表示 \(\sum_{j=i}^n a_j\) ,即 ...
- 1644 免费馅饼 题解(c++)(S.B.S.)
1644 免费馅饼(巴蜀oj上的编号) 题面: SERKOI最新推出了一种叫做“免费馅饼”的游戏. 游戏在一个舞台上进行.舞台的宽度为W格,天幕的高度为H格,游戏者占 ...
- Codeforces Beta Round #51 C. Pie or die 博弈论找规律 有趣的题~
C. Pie or die Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/55/problem/ ...
- hdoj 1969 Pie【二分】
Pie Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- BZOJ1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富
1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 459 Sol ...
- Vitaliy and Pie(模拟)
Vitaliy and Pie Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Su ...
- Pie(求最小身高差,dp)
Pie Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
随机推荐
- Linux网络课程学习第四天
课程内容包括:管道符.重定向与环境变量. 学习心得:个人感觉本章节还是不太好理解,尤其是对自己的基础还不是特别的扎实课余时间还是要反复的复习.
- HTML5,从零开始
一.网页的组成部分 <!DOCTYPE html> <html> <head> <title>这是标题</title> <meta c ...
- linux c++调试日志函数
#ifndef MYLOG_H #define MYLOG_H #include <stdio.h> #define __DEBUG__ #ifdef __DEBUG__ #define ...
- mysql 数据库优化的几种方法
1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽 ...
- 854. Floyd求最短路(模板)
给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数. 再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出“impossible”. 数 ...
- 0005 uwsgi配置
在配置文件目录Configurations下创建一个名为uwsgi.ini的文件,用于uwsgi服务配置. uwsgi在服务器上使用,接收nginx的转发请求. 内容如下: # 配置文件:这一行必须有 ...
- window10安装nginx及请求转发到tomcat服务器访问项目及开机自启
一.安装ngnix 1. 到nginx官网上下载相应的安装包,http://nginx.org/en/download.html: 下载进行解压,将解压后的文件放到自己心仪的目录下,我的解压文件放在 ...
- Android Q 使用通知栏消息
String myChannelId = "iot"; String myChannelName = "告警通知服务"; NotificationManager ...
- Vuex项目实战store
首先简单了解一下什么是Vuex? Vuex是一个专为Vue.js应用程序开发的状态管理模式.采用集中式存储来管理应用所有组件的状态. 以下是对vuex的使用的简单介绍: 一.安装 npm i vuex ...
- Wannafly Camp 2020 Day 1A 期望逆序对 - 概率期望
分类讨论即可 #include <bits/stdc++.h> using namespace std; #define int long long const int N = 5005; ...