bzoj1043
每次做计算几何题都要做好久
考虑每个圆对答案的贡献,也就是每个圆被后面圆覆盖还有多少
可以把覆盖当成盖住一段弧度,看最后有多少没被覆盖
这就相当于线段覆盖问题了,
推推公式,算极角然后排序即可
md,pascal算极角就是麻烦
uses math;
const pi=3.1415926535897932384626433832795;
eps=1e-4;
type node=record
l,r:double;
end; var q:array[..] of node;
x,y,r:array[..] of double;
t,j,i,n:longint;
ans:double; function dis(i,j:longint):double;
begin
exit(sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j])));
end; function have(i,j:longint):boolean;
begin
exit(r[j]-r[i]>=dis(i,j));
end; procedure swap(var a,b:node);
var c:node;
begin
c:=a;
a:=b;
b:=c;
end; function get(x,y:double):double;
begin
if x= then
begin
if y> then exit(pi/)
else exit(-pi/);
end;
get:=arctan(y/x);
if (x<) then get:=get+pi;
end; procedure sort(l,r:longint);
var i,j:longint;
x:double;
begin
i:=l;
j:=r;
x:=q[(l+r) shr ].l;
repeat
while q[i].l<x do inc(i);
while x<q[j].l do dec(j);
if not(i>j) then
begin
swap(q[i],q[j]);
inc(i);
dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end; function cal(j:longint):double;
var i:longint;
d,now,l,z,an:double;
begin
for i:=j+ to n do
if have(j,i) then exit();
t:=;
for i:=j+ to n do
begin
d:=dis(i,j);
if not have(i,j) and (r[j]+r[i]>d) then
begin
inc(t);
an:=get(x[i]-x[j],y[i]-y[j]);
l:=(sqr(r[j])-sqr(r[i])+sqr(d))/(*d);
z:=arccos(l/r[j]);
q[t].l:=an-z;
q[t].r:=an+z;
// writeln(an,' ',z,' ',i,' ',x[i]-x[j],' ',y[i]-y[j]);
// readln;
end;
end;
for i:= to t do
begin
if q[i].l>*pi then q[i].l:=q[i].l-*pi;
if q[i].r>*pi then q[i].r:=q[i].r-*pi;
if q[i].l< then q[i].l:=q[i].l+*pi;
if q[i].r< then q[i].r:=q[i].r+*pi;
if q[i].l>q[i].r then
begin
inc(t);
q[t].l:=;
q[t].r:=q[i].r;
q[i].r:=*pi;
end;
end;
sort(,t);
cal:=;
now:=;
for i:= to t do
if q[i].l>now then
begin
cal:=cal+(q[i].l-now);
now:=q[i].r;
end
else if now<q[i].r then now:=q[i].r; cal:=cal+*pi-now;
if cal< then cal:=;
cal:=cal*r[j];
end; begin
readln(n);
for i:= to n do
readln(r[i],x[i],y[i]); for i:= to n do
ans:=ans+cal(i); writeln(ans::);
end.
bzoj1043的更多相关文章
- 【计算几何】bzoj1043 [HAOI2008]下落的圆盘
n^2枚举圆盘,用两圆圆心的向量的极角+余弦定理求某个圆覆盖了该圆的哪一段区间(用弧度表示),最后求个区间并. 注意--精度--最好再累计区间的时候,把每个区间的长度减去EPS,防止最后覆盖的总区间超 ...
- 【bzoj1043】下落的圆盘
[bzoj1043]下落的圆盘 题意 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求. \(1\leq n\leq 1000\ ...
- 【BZOJ1043】[HAOI2008]下落的圆盘 几何
[BZOJ1043][HAOI2008]下落的圆盘 Description 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求. ...
- bzoj1043 下落的圆盘
Description 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求. Input 第一行为1个整数n,N<=100 ...
- bzoj1043[HAOI2008]下落的圆盘 计算几何
1043: [HAOI2008]下落的圆盘 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1598 Solved: 676[Submit][Stat ...
- bzoj1043 [HAOI2008]下落的圆盘
Description 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求. Input 第一行为1个整数n,N<=1000 ...
- BZOJ1043:[HAOI2008]下落的圆盘——题解(配图片)
http://www.lydsy.com/JudgeOnline/problem.php?id=1043 Description 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周 ...
- 【BZOJ1043】下落的圆盘 [计算几何]
下落的圆盘 Time Limit: 10 Sec Memory Limit: 162 MB[Submit][Status][Discuss] Description 有n个圆盘从天而降,后面落下的可 ...
- BZOJ 1043 【bzoj1043】[HAOI2008]下落的圆盘 | 暴力么??
题目: 题解: 大概是黄学长的博客 #include<cstdio> #include<algorithm> #include<cstring> #include& ...
随机推荐
- BOM-字节序标记
BOM——Byte Order Mark 字节序标记 首先是什么是字节序? 字节序:与二进制数据在机器存放位置相关的! 可分为两类: 1. 小端字节序: 低地址放低位数据. x86系列的计算机就使用这 ...
- NOI2014 全国互测Round2
数据包:http://pan.baidu.com/s/1pJNSkL9 T1: 我们先直接用矩阵快速幂暴力 首先是0维,f1=1,f2=1 然后推出下一维的f1'和f2' 下一维的f1'和f2'其实就 ...
- .NET 轻松实现HTML的绝对过滤之SafeHelper
当今网页中经常使用到网页编辑器,因为人们需要在网页中插入图片,视频,样式等html代码内容,这使得网页的信息更加丰富.随之而来的,也给程序开发者带来了不少麻烦,因为提交的html中难免会出现不安全标记 ...
- ViewController 优化
解决问题:部分复杂页面的Controller过于庞大,不利于维护与复用: 复杂的页面大多是基于tableview的页面.复杂页面的代码大致可分为两部分(复杂的View布局用Nib实现的话,一般大家都是 ...
- BZOJ 3875: [Ahoi2014]骑士游戏 dp+spfa
题目链接: 题目 3875: [Ahoi2014]骑士游戏 Time Limit: 30 Sec Memory Limit: 256 MB 问题描述 [故事背景] 长期的宅男生活中,JYY又挖掘出了一 ...
- ffmpeg参数解释
基本选项: -formats 输出所有可用格式 -f fmt 指定格式(音频或视频格式) -i filename 指定输入文件名,在linux下当然也能指定: 0.0(屏幕录制)或摄像头 -y 覆盖已 ...
- CentOS 6.4 搭建SVN服务器
SVN作为新一代代码版本管理工具,有很多优点,管理方便,逻辑明确,安全性高,代码一致性高.SVN数据存储有两种方式,BDB(事务安全表类型)和FSFS(一种不需要数据库的存储系统),为了避免在服务器连 ...
- linux源码阅读笔记 void 指针
void 指针的步长为1,而其他类型的指针的步长与其所定义的数据结构有关. example: 1 #include<stdio.h> 2 main() 3 { 4 int a[10]; 5 ...
- PHP 性能分析第二篇: Xhgui In-Depth
[前言]这是国外知名博主 Davey Shafik 撰写的 PHP 应用性能分析系列的第二篇,第一篇介绍 Xhprof/Xhgui,第三篇则关注于性能调优实践. 在第一篇中,我们初步介绍了 xhpro ...
- Java并发包中常用类小结(二)
6.ThredPoolExecutor ThredPoolExecutor是基于命令模式下的一个典型的线程池的实现,主要通过一些策略实现一个典型的线程池,目前已知的策略有ThreadPoolExecu ...