每次做计算几何题都要做好久

考虑每个圆对答案的贡献,也就是每个圆被后面圆覆盖还有多少

可以把覆盖当成盖住一段弧度,看最后有多少没被覆盖

这就相当于线段覆盖问题了,

推推公式,算极角然后排序即可

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的更多相关文章

  1. 【计算几何】bzoj1043 [HAOI2008]下落的圆盘

    n^2枚举圆盘,用两圆圆心的向量的极角+余弦定理求某个圆覆盖了该圆的哪一段区间(用弧度表示),最后求个区间并. 注意--精度--最好再累计区间的时候,把每个区间的长度减去EPS,防止最后覆盖的总区间超 ...

  2. 【bzoj1043】下落的圆盘

    [bzoj1043]下落的圆盘 题意 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求. \(1\leq n\leq 1000\ ...

  3. 【BZOJ1043】[HAOI2008]下落的圆盘 几何

    [BZOJ1043][HAOI2008]下落的圆盘 Description 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求.  ...

  4. bzoj1043 下落的圆盘

    Description 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求.  Input 第一行为1个整数n,N<=100 ...

  5. bzoj1043[HAOI2008]下落的圆盘 计算几何

    1043: [HAOI2008]下落的圆盘 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1598  Solved: 676[Submit][Stat ...

  6. bzoj1043 [HAOI2008]下落的圆盘

    Description 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求. Input 第一行为1个整数n,N<=1000 ...

  7. BZOJ1043:[HAOI2008]下落的圆盘——题解(配图片)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1043 Description 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周 ...

  8. 【BZOJ1043】下落的圆盘 [计算几何]

    下落的圆盘 Time Limit: 10 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Description 有n个圆盘从天而降,后面落下的可 ...

  9. BZOJ 1043 【bzoj1043】[HAOI2008]下落的圆盘 | 暴力么??

    题目: 题解: 大概是黄学长的博客 #include<cstdio> #include<algorithm> #include<cstring> #include& ...

随机推荐

  1. SecureCRT配色方案

    SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件.作为一款经常使用的终端软件,一个好的配色方案可以大大的提高学 ...

  2. 在VisualStudio 2012上使用MVC3出现错误的解决办法

    1. 错误: 找不到方法:“System.Collections.Generic.Dictionary`2<System.String,BlockParser> System.Web.Ra ...

  3. 从状态转移看:载波侦听多路访问/冲突避免(CSMA/CA)

    CSMA/CA是写入IEEE802.11的无线网络MAC层标准协议,相信看到这篇文章的读者都知道它是用来做什么的.但许多短文对这个协议的解释都有所缺乏,因此本文用状态转换图的形式详细说明协议的工作流程 ...

  4. web服务器和应用服务器

    通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods).确切一点,你可以说:Web服务器专门处理HTTP请 ...

  5. STS中取消show in Breadcrumb方法

    前言:STS是Spring产品下的一个开发工具,它和eclipse很像,只不过对Spring有更好的兼容.Show in Breadcrumb是快速导航条,可以清晰的看到我们当前的类,属性或方法的导航 ...

  6. asp.net 通过ajax方式调用webmethod方法使用自定义类传参及获取返回参数

    实体类    public class User    {        public int Id { get; set; }        public string Name { get; se ...

  7. VIM配置(转载)

    注: 转载于http://www.cnblogs.com/ma6174/ 花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配置主要有以下优点: 1.按F5可以直接编译并执行C.C++.ja ...

  8. 运用 DataContractSerializer 存储本地对象

    public void Save(string filename,State state) { DataContractSerializer ds = new DataContractSerializ ...

  9. [转载]C#中int和IntPtr相互转换

    方法一. int转IntPtr int i = 12;           IntPtr p = new IntPtr(i); IntPtr转int int myi = (int)p;         ...

  10. Java学习第三篇:类的三大特征,抽象类,接口,final关键字

    一.类的三大特征 1.封装性 (1).什么是封装 封装就是把抽象出的数据和对数据的操作封装在一起, 数据被保护在内部, 程序的其他部分只有通过被授权的操作(成员方法), 才能对数据进行操作. (2). ...