2015ACM-ICPC长春E题(hdu5531)题解
一、题意
No response.T_T
二、思路
分$n$为奇数或者偶数讨论。
如果$n$是奇数,列出不等式组:$r_1+r_2=d_{1},r_2+r_3=d_{2},r_3+r_4=d_{3},\cdots,r_{n-1}+r_n=d_{n-1},r_n+r_1=d_n$,可以解出,$r_1=\frac{d_{1}+d_{3}+d_{5}+\cdots-d_{2}-d_{4}-\cdots}{2}$,然后再用上述式子依次算出$r_2$至$r_n$。最后判断$r_1$至$r_n$中是否存在负数即可。
如果$n$是偶数。如果奇数起点的边之和$s_1=d_1+d_3+d_5+\cdots+d_{n-1}$不等于$s_2=d_2+d_4+d_6+\cdots+d_n$,说明无解,否则,一定可以三分枚举出$r_1$,然后推出其他半径。要注意的是,三分的下界和上界需要处理出来。否则,面积关于$r_1$的二次函数在$[low,high]$区间内不一定只有一个极小值。最后判断是否所有半径都大于$0$。
三、代码
#include<bits/stdc++.h>
using namespace std;
);
struct point {
double x, y;
} p[];
], ansr[];
int n;
inline bool eq(double x, double y) {
);
}
inline double dis(point a, point b) {
return hypot(a.x - b.x, a.y - b.y);
}
double calc(double r1) {
ansr[] = r1;
double sum = PI * r1 * r1, nr;
; i <= n; ++i) {
ansr[i] = d[i - ] - ansr[i - ];
sum += PI * ansr[i] * ansr[i];
}
return sum;
}
int main() {
// freopen("e.in", "r", stdin);
int T;
for(scanf("%d", &T); T--;) {
;
scanf("%d", &n);
; i <= n; ++i)scanf("%lf %lf", &p[i].x, &p[i].y);
; i <= n; ++i)d[i] = dis(p[i], i < n ? p[i + ] : p[]);
) {
;
; i <= n; i++) {
)fz += d[i];
else fz -= d[i];
}
ansr[] = fz / ;
; i <= n; ++i)ansr[i] = d[i - ] - ansr[i - ];
] + ansr[n], d[n]))imp = ;
}
else {
, t2 = ;
; i <= n; ++i) {
)t1 += d[i];
else t2 += d[i];
}
;
else {
, high = min(d[], d[n]), lmid, rmid, s1, s2, sum = ;
; i <= n; ++i) {
)sum += d[i], high = min(high, sum);
else sum -= d[i], low = max(low, sum);
}
;
while(ttt--) {
lmid = (low + high) / ;
rmid = (lmid + high) / ;
s1 = calc(lmid), s2 = calc(rmid);
if(s1 < s2)high = rmid;
else low = lmid;
}
double r1;
if(calc(low) < calc(high))r1 = low;
else r1 = high;
calc(r1);
}
}
; i <= n; ++i) {
)imp = ;
}
if(imp) puts("IMPOSSIBLE");
else {
;
; i <= n; ++i)ans += ansr[i] * ansr[i];
ans *= PI;
printf("%.2f\n", ans);
; i <= n; ++i)printf("%.2f\n", ansr[i]);
}
}
;
}
2015ACM-ICPC长春E题(hdu5531)题解的更多相关文章
- 2015ACM/ICPC亚洲区沈阳站 部分题解
链接在这:http://bak.vjudge.net/contest/132442#overview. A题,给出a,b和n,初始的集合中有a和b,每次都可以从集合中选择不同的两个,相加或者相减,得到 ...
- 2015ACM/ICPC亚洲区长春站 L hdu 5538 House Building
House Building Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- 2015ACM/ICPC亚洲区长春站 B hdu 5528 Count a * b
Count a * b Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Tot ...
- (HDU 5558) 2015ACM/ICPC亚洲区合肥站---Alice's Classified Message(后缀数组)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5558 Problem Description Alice wants to send a classi ...
- 2015ACM/ICPC亚洲区长春站 J hdu 5536 Chip Factory
Chip Factory Time Limit: 18000/9000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)T ...
- 2015ACM/ICPC亚洲区长春站 H hdu 5534 Partial Tree
Partial Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ...
- 2015ACM/ICPC亚洲区长春站 G hdu 5533 Dancing Stars on Me
Dancing Stars on Me Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Ot ...
- 2015ACM/ICPC亚洲区长春站 F hdu 5533 Almost Sorted Array
Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Ot ...
- 2015ACM/ICPC亚洲区长春站 E hdu 5531 Rebuild
Rebuild Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total S ...
随机推荐
- OC基础知识总结 分类: ios学习 OC 2015-06-26 17:58 58人阅读 评论(0) 收藏
//OC: Objective-C, 面向对象的C语言 //OC与C的区别 //1.OC是C的超集, C语言的所有语法都可以在OC中使用 //2.OC是面向对象 //3.OC是一门运行时语言 //4. ...
- Zabbix3.4-部署安装
Zabbix部署安装: 系统环境:CentOS 7 Zabbix版本:Zabbix 3.4 关闭防火墙和SELINUX systemctl stop firewalld && sete ...
- C++ 写的地图控件,支持google 百度 在线离线地图
C++处理google 百度地图在网上查阅了很多都是通过浏览器方式显示地图信息, 跟我目前项目很不符合, 所以仔细研究了一下C++方式显示地图.通过地图投影以及墨卡托投影,在通过平面地图计算经纬度. ...
- WinRAR的自解压模式 - imsoft.cnblogs
一个 SFX (SelF-eXtracting)自解压文件是压缩文件的一种,它结合了可执行文件模块,一种用以运行从压缩文件解压文件的模块.这样的压缩文件不需要外部程序来解压自解压文件的内容,它自己便可 ...
- IIS7中Ajax.AjaxMethod无效的原因及解决方法
使用Ajax.AjaxMethod方法在asp.net的服务器下一切正常,用iis的时候,js中总是cs类找不到,具体的解决方法如下,遇到类似情况的朋友可以参考下 最近做用Ajax.AjaxMetho ...
- hdu2073-2078
hdu2073 数学 #include<stdio.h> #include<math.h> double len(double x){ )*(x+)); } int main( ...
- hdu2060-2062
hdu 2060 斯诺克,读懂题意直接模拟 #include<stdio.h> int main(){ int N; ]; a[]=; ;i<=;i++){ a[i]=(-i)*i/ ...
- Linux(CentOS)搭建SVN服务器
1.安装命令 yum -y install subversion 查看SVN安装位置 rpm -ql subversion 查看SVN版本 svnserve --version 2.创建版本库根目录( ...
- day 2克隆虚拟机器minimal需要注意的问题和制作本地yum源和常用的Linux的命令
------- 克隆bee2 PS:因为复制机器后,又多了一个网卡eth1.本来只有一个网卡eth0,下面是解决方案. 解决克隆后eth0不见的问题 1.直接修改vi /etc/sysconfig/ ...
- HDMI接口基本信息
一.HDMI基本概念1.HDMI标准的发展历史: 2002年12月9日,HDMI1.0版正式发布,标志着HDMI技术正式登上历史舞台. 2004年1月,HDMI1.1版发布. 2005年8月,HDMI ...