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

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

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

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

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

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. 怎样开启SQL数据库服务

    使用数据库时开启服务是需要的,我给大家具体介绍几种方式开启SQL Sever 服务.这几种我都用图文的形式用三个开启方式给你展示,对于不会开启服务的朋友可以学习下,这些前提是你的电脑安装了SQL数据库 ...

  2. 一点简单的关于ASP.NET下载

    一点简单的关于ASP.NET下载 个人简单的认为是有两种方法的,第一种就是直接用一个超链接链接到我们要下载的资源就可以了.只是说这个方法会有一点小问题就是,比如像图片或者文本文件这些浏览器是可以自动将 ...

  3. 深入浅出百度地图API开发系列(1):前言

    百度地图API目前在地图API领域越来越受到众多开发者的关注,许多应用都使用到了百度地图API服务,包括博主me,我自己使用做的是Javascript API,根据经验,我想整理出一份系列教程,如果能 ...

  4. [resource]Python机器学习库

    reference: http://qxde01.blog.163.com/blog/static/67335744201368101922991/ Python在科学计算领域,有两个重要的扩展模块: ...

  5. EXT--表单AJax提交后台,返回前端数据格式的转换

    前言: 前端发送请求至服务端(Java),得到的数据是Java语言对象所表现的形式,经常需要转换为JSON格式的字符串写出至前端:当前端获取后也往往需要将字符串转换为js的对象.本文描述了在EXT作为 ...

  6. 【log4net】配置文件

    相关资料: http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html 注意: //如果为了使得应用程序的配置文件(web/app.con ...

  7. POJ 1702

    #include <iostream> #include <cmath> #define MAXN 100 using namespace std; void fun(int ...

  8. mysql怎样建表及mysql优化

    1.符合数据库三范式 2.字段选择合适的数据类型 3.注意表之间的联系,一对多,多对多,一对一 4.拆分表,把不常用的字段单独成表. 5.建立索引,哪些字段建立索引?建立索引的原则?最左前缀原则,wh ...

  9. 手动安装UniDAC的过程

    每次安装都不一样,而且有时候挺麻烦的,所以记下来.我这次安装过程是这样的: 0. 修改Source\Delphi7\Make.bat,填入正确的IdeDir 1.找到source\delphi7目录, ...

  10. 修改linux终端命令行颜色

    进入修改:vim /root/.bashrc 1.PS1 要修改linux终端命令行颜色,我们需要用到PS1,PS1是Linux终端用户的一个环境变量,用来说明命令行提示符的设置.在终端输入命令:#s ...