HDU 5531 Rebuild
2015 ACM/ICPC 长春现场赛 E题
三分。
如果节点个数是奇数,那么直接列方程可以求解,因为,如果第一个圆半径变大,必然导致最后一个圆的半径变大,
所以,节点是奇数的时候,要么无解,要么只有一组解。
如果节点个数是偶数,如果奇数编号起点的线段长度之和不等于偶数编号起点的线段长度之和,那么必定无解,这个列方程也可以发现的。
剩下的就要三分求最优解了,边界的确定有点小坑,第一个半径是X,第二个半径就是 L12-X,第三个半径就是L23-L12+X.....写出n个关于X的表达式,可以确定三分范围。
至此,此题已解。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std;const double PI=acos(-1.0); const double eps=1e-6;struct Point {double x,y;double r; }P[10000+10]; struct Line {double len; }L[10000+10]; int T,n; double r[10000+10];bool Equal(double a,double b) {if(fabs(a-b)<eps) return 1;return 0; }double Dis(int a,int b) {return sqrt((P[a].x-P[b].x)*(P[a].x-P[b].x)+(P[a].y-P[b].y)*(P[a].y-P[b].y)); }void read() {scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lf%lf",&P[i].x,&P[i].y);for(int i=1;i<=n;i++){if(i<n) L[i].len=Dis(i,i+1);else L[i].len=Dis(n,1);} }void print1() {double sum=0;for(int i=1;i<=n;i++)if(P[i].r<0){printf("IMPOSSIBLE\n");return ;}for(int i=1;i<=n;i++)sum=sum+P[i].r*P[i].r;printf("%.2lf\n",sum*PI);for(int i=1;i<=n;i++)printf("%.2lf\n",P[i].r); }double ff(double R) {r[1]=R;for(int i=2;i<=n;i++)r[i]=L[i-1].len-r[i-1];double sum=0;for(int i=1;i<=n;i++) sum=sum+r[i]*r[i];return sum; }void solve() {if(n%2==1){double len1=0,len2=0;for(int i=1;i<=n;i++){if(i%2==0) len2=len2+L[i].len;else len1=len1+L[i].len;}P[1].r=(len1-len2)/2.0;for(int i=2;i<=n;i++)P[i].r=L[i-1].len-P[i-1].r;if(!Equal(L[n].len-P[1].r,P[n].r)){printf("IMPOSSIBLE\n");return;}print1();}else if(n%2==0){double len1=0,len2=0;for(int i=1;i<=n;i++){if(i%2==1) len1=len1+L[i].len;else len2=len2+L[i].len;}if(len1!=len2) printf("IMPOSSIBLE\n");else{double left,right,mid,midmid;left=0; right=min(L[1].len,L[n].len);double sum=0;for(int i=1;i<=n;i++){if(i%2==1){sum=sum+L[i].len;if(sum<right) right=sum;}else{sum=sum-L[i].len;if(sum>left) left=sum;}}int tot=100;while(tot--){mid=(left+right)/2.0;midmid=(mid+right)/2.0;double k1=ff(mid);double k2=ff(midmid);if(k1-k2>eps) left=mid;else right=midmid;}for(int i=1;i<=n;i++)if(r[i]<0){printf("IMPOSSIBLE\n");return ;}printf("%.2lf\n",ff(midmid)*PI);for(int i=1;i<=n;i++) printf("%.2lf\n",r[i]);}} }int main() {scanf("%d",&T);while(T--){read();solve();}return 0; }
转载于:https://www.cnblogs.com/zufezzt/p/4934062.html
HDU 5531 Rebuild相关推荐
- HDU 4389 - X mod f(x)
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...
- hdu 4389 囧,打表
http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...
- HDU——1106排序(istringstream的使用、STLvector练习)
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 1248 寒冰王座(全然背包:入门题)
HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...
- hdu 1312 Red and Black 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...
- HDU 1429 胜利大逃亡(续) (BFS+位压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 1272 小希的迷宫
Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...
- HDOJ 1157 HDU 1157 Who's in the Middle ACM 1157 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1157 题目描述: ...
最新文章
- 深挖数据价值 阿里云栖开年大会报道
- **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)
- stdthread(7)并发unique_lock
- 关于为使用ArrayAdapter创建ListView时,使用TextView添加子项的问题
- 性能标准两腿走:IE9平台预览版初步体验
- Abstract Self-Balancing Binary Search Tree
- 使用java实现rfc3161,openssl验证用自签名证书签名的RFC3161时间戳
- oracle文件系统挂载点,挂载和取消挂载 Oracle Solaris 文件系统
- .Net水晶报表的使用总结
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十九)ES6.2.2 安装Ik中文分词器
- 0909 对编译原理的想法
- Nginx 项目部署和配置
- 文本文档变成java文件_java 程序文本文档形式的编写,编译,及运行
- java jave1.0.2_GitHub - dadiyang/jave at v1.0.2
- 解读沃指数APP排行榜的三大亮点:垂直领域凶猛
- python遍历文件夹循环处理图片
- Clouda框架环境搭建
- 项目进度管理__计划评审技术之标准正态分布表
- 华为服务器虚拟云主机,虚拟云主机和虚拟云服务器
- python引流脚本开发工具_Python脚本 抖X自动关注粉丝引流脚本
热门文章
- VMware虚拟机上安装Linux系统
- 最初步软件需求说法的简单调查报告
- 精灵混合加密系统_数据安全——混合云的数据备份
- etc的常见算法_谈常用的几个机器学习算法,学懂算法也可以这么简单!
- 周五话运营 | 做个了解用户的精细化运营喵
- Linux解决openoffice转换PDF乱码问题(ubutun16.0.4)
- (五)开源IT资产管理系统--分发OCS客户端
- 思科安全——企业安全棋局的“宇宙流”
- Java窗口(JFrame)从零开始(8)——文本框+文本域+密码框
- handler机制的原理