Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1725  Solved: 743
[Submit][Status][Discuss]

Description

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

Input

  第一行为1个整数n,N<=1000
接下来n行每行3个实数,ri,xi,yi,表示下落时第i个圆盘的半径和圆心坐标.

Output

  最后的周长,保留三位小数

Sample Input

2
1 0 0
1 1 0

Sample Output

10.472
 
这题让我想到了线段覆盖。。。输错一个double调了我一晚上
利用三角函数求出每个圆盘覆盖先前圆盘弧度的范围,最后统计总共覆盖了多少弧度,计算出没有被覆盖的弧度大小,乘以半径就是周长
 
 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iterator>
#include<vector>
using namespace std; const int MAXN=;
const double pi=acos(-1.0);
#define sqr(x) (x)*(x) struct Line
{
double l,r;
};
double r[MAXN],x[MAXN],y[MAXN];
vector<Line> L[MAXN];
vector<Line>::iterator iter; int n;
double ans; bool cmp(Line a,Line b)
{
return a.l<b.l;
} double dist(int a,int b)
{
return sqrt(sqr(x[a]-x[b])+sqr(y[a]-y[b]));
} bool conta(int a,int b)
{
return r[a]-r[b]>=dist(a,b);
} bool inter(int a,int b)
{
return r[a]+r[b]>=dist(a,b);
} void insrad(int a,int b)
{
double d=dist(a,b);
double rad=acos((sqr(r[a])+sqr(d)-sqr(r[b]))/(*r[a]*d));
double st=atan2(x[a]-x[b],y[a]-y[b]);
if(st-rad<-pi)
{
L[a].push_back((Line){st-rad+*pi,pi});
L[a].push_back((Line){-pi,st+rad});
return;
}
if(st+rad>pi)
{
L[a].push_back((Line){st-rad,pi});
L[a].push_back((Line){-pi,st+rad-*pi});
return;
}
L[a].push_back((Line){st-rad,st+rad});
} double cal(int x)
{
for(int i=x+;i<=n;i++)
if(conta(i,x)) return ;
for(int i=x+;i<=n;i++)
if(!conta(x,i)&&inter(x,i))
insrad(x,i);
sort(L[x].begin(),L[x].end(),cmp);
double t=,last=-pi;
for(iter=L[x].begin();iter!=L[x].end();iter++)
if(iter->l>last)
{
t+=iter->l-last;
last=iter->r;
}
else last=max(last,iter->r);
t+=pi-last;
return t*r[x];
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%lf %lf %lf",&r[i],&x[i],&y[i]);
for(int i=;i<=n;i++)
ans+=cal(i);
printf("%.3lf\n",ans);
return ;
}

1043: [HAOI2008]下落的圆盘的更多相关文章

  1. 【BZOJ】1043: [HAOI2008]下落的圆盘(计算几何基础+贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1043 唯一让我不会的就是怎么求圆的周长并QAAQ... 然后发现好神!我们可以将圆弧变成$[0, 2 ...

  2. BZOJ 1043 HAOI2008 下落的圆盘 计算几何

    题目大意:n个圆盘依次下落.求终于能看到的轮廓线面积 円盘反对! 让我们一起团结起来! 赶走円盘! 咳咳.非常神的一道题 今天去看了题解和白书才搞出来-- 首先我们倒着做 对于每一个圆盘处理出在它之后 ...

  3. 1043: [HAOI2008]下落的圆盘 - BZOJ

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

  4. bzoj 1043 [HAOI2008]下落的圆盘——圆的周长

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1043 算每个圆被它后面的圆盖住了多少圆弧即可.注意判断这个圆完全被后面盖住的情况. #inc ...

  5. BZOJ 1043 [HAOI2008]下落的圆盘 ——计算几何

    倒着考虑,加入一个圆,判断和前面有没有完全覆盖的情况. 如果没有,和圆盘一一取交集,然后计算它们的并集,然后计算即可. #include <map> #include <cmath& ...

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

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

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

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

  8. luogu P2510 [HAOI2008]下落的圆盘

    LINK:下落的圆盘 计算几何.n个圆在平面上编号大的圆将编号小的圆覆盖求最后所有没有被覆盖的圆的边缘的总长度. 在做这道题之前有几个前置知识. 极坐标系:在平面内 由极点 极轴 和 极径组成的坐标系 ...

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

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

随机推荐

  1. 原生Ajax实现

    发现一件可怕的事情,前端学不完了,春招要开始了.唉,人生苦短.

  2. Django---登录(含随机生成图片验证码)、注册示例讲解

    登录(验证码).注册功能具体代码 # urls.py from django.contrib import admin from django.urls import path from app01 ...

  3. Java对日期Date类进行加减运算一二三

    转载大神 https://blog.csdn.net/hacker_lees/article/details/74351838

  4. 使用 dbutils 的结果集包装类 StringTrimmedResultSet

    1.功能 StringTrimmedResultSet 的功能是去掉结果集中数据的前后空格,这个方法是在取结果的时候处理. 2.使用 一般在新建 QueryRunner 对象的时候使用: QueryR ...

  5. 转 nagios监控oracle运行状况

    https://blog.csdn.net/heizistudio/article/details/8638488 nrpe安装脚本 nagios-plugins-1.4.13.tar.gznrpe- ...

  6. C. Destroying Array 并查集,逆向思维

    用并查集维护线段,从后往前枚举没个删除的位置id[i] 那么,现在删除了这个,就是没有了的,但是上一个id[i + 1]就是还没删除的. 然后现在进行合并 int left = id[i + 1];( ...

  7. UVA - 12333 Revenge of Fibonacci 高精度加法 + 字典树

    题目:给定一个长度为40的数字,问其是否在前100000项fibonacci数的前缀 因为是前缀,容易想到字典树,同时因为数字的长度只有40,所以我们只要把fib数的前40位加入字典树即可.这里主要讨 ...

  8. nginx 添加https支持

    自行颁发不受浏览器信任的SSL证书为晒晒IQ网颁发证书.ssh登陆到服务器上,终端输入以下命令,使用openssl生成RSA密钥及证书. # 生成一个RSA密钥 $ openssl genrsa -d ...

  9. AssetDatabase的方法总结

    AssetDatabase的方法总结 1.AssetDatabase.FindAssets public static string[] FindAssets(string filter);publi ...

  10. Solr7.x介绍安装和配置(单机版)

    之前学的是4.x,然后一看官网,奶奶的都7.x了.于是查了一番资料..... 1)下载和安装 wget http://mirror.bit.edu.cn/apache/lucene/solr/7.3. ...