http://172.20.6.3/Problem_Show.asp?id=1502
这种题用了快一天才写出来也是真的辣鸡。主要思路就是计算一下被挡住的弧度然后对弧度进行贪心。
最开始比较困扰的是求弧度值及其起始位置的部分,弧度值很好求,位置有点恶心,我的起始位置设置的是圆的十二点方向顺时针到起始位置的弧度值,然后我分了四种情况讨论(因为遮挡的方向有两种不同情况,遮挡部分弧度值与180度的关系又是两种情况),应该是有更简单的方法的,但是我只能想出来这种了。。。

代码

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
const int maxn=;
const double eps=0.0000001;
long long n;
double r[maxn]={},x[maxn]={},y[maxn]={};
struct nod{
double id,v;
}e[maxn];
int tot;
bool mmp(nod aa,nod bb){
return aa.id<bb.id;
}
double getit(int i){
tot=;double cnt=;
for(int j=n;j>i;j--){
double w=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
if(r[i]+r[j]-w<=||r[i]-r[j]-w>=)continue;
if(r[j]-r[i]-w>=) return ; double z=(r[i]*r[i]-r[j]*r[j]+w*w)/(*w);
double h=acos(z/r[i])*; double xx=x[i]+(x[j]-x[i])/w*z,yy=y[i]+(y[j]-y[i])/w*z;
double w1=sqrt((x[i]-xx)*(x[i]-xx)+(y[i]+z-yy)*(y[i]+z-yy));
double h2=asin(w1//z)*;
if(xx<x[i]){
if(h2<)h2=-h2;
else if(h2>) h2=*M_PI-h2; }
else if (xx>x[i]){if(h2<) h2=*M_PI+h2;}
h2=h2-h/;
if(h2<)h2+=*M_PI;
h=h2+h;
if(h>*M_PI){
e[++tot].id=h2;e[tot].v=*M_PI;
e[++tot].id=;e[tot].v=h-*M_PI;
}else{e[++tot].id=h2;e[tot].v=h;}
}
sort(e+,e++tot,mmp);
double ll=0.0,rr=0.0;
for(int j=;j<=tot;j++){
if(e[j].id-rr<){
if(e[j].v-rr>){
rr=e[j].v;
}
}
else if(e[j].v-rr>){
cnt+=rr-ll;
rr=e[j].v;ll=e[j].id;
}
}
cnt+=rr-ll;
return r[i]*(M_PI*-cnt);
}
int main(){
//freopen("wtf.in","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%lf%lf%lf",&r[i],&x[i],&y[i]);
}double ans=;
for(int i=n;i>=;i--){
ans+=getit(i);
}printf("%.3f\n",ans);
return ;
}

JZYZOJ1502 [haoi2008]下落的圆盘 计算几何 贪心的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Spring 与 Quartz 动态配置(数漫江湖)

    因为项目的需求,需要有动态配置计划任务的功能.本文在 Quartz JobBean 中获取配置的 Quartz cronExpression 时间表达式及 Spring Bean 的对象名.方法名并运 ...

  2. 微信小程序提示框

    一.wx.showToast 如上图所示,showToast会显示一个弹窗,在指定的时间之后消失.中间的图标默认只有加载中和成功两种,也可以用image参数自定义图标 wx.showToast({ t ...

  3. JavaScript字符串逆序

    如何对字符串进行倒序呢?你首先想到的方法就是生成一个栈,从尾到头依次取出字符串中的字符压入栈中,然后把栈连接成字符串. var reverse = function( str ){ var stack ...

  4. bzoj 1968 数学

    在1-n所有数中,i一共可以成为n/i个数的约数,也即所有的约数中有n/i个i,所以扫一遍累加答案就好了. /********************************************* ...

  5. 浅谈Trigger(SimpleTrigger&CronTrigger)

     1.Trigger是什么 Quartz中的触发器用来告诉调度程序作业什么时候触发,即Trigger对象是用来触发执行job的.  2.Quartz中的Trigger  3.触发器通用属性: JobK ...

  6. 微信支付:curl 出错,错误码: 60

    在测试微信支付 - 模式二 - 扫码支付时,遇到如下错误: curl出错,错误码:60 这是因为在 WxPay.Api.php 文件中做了严格的 ssl 证书校验: curl_setopt($ch,C ...

  7. 1000: 恶意IP 课程作业

    1000: 恶意IP Time Limit: 1 Sec  Memory Limit: 16 MB Description Water同学最近好不容易学会了用Tornado建起一个个人的Website ...

  8. [New Learn] RunLoop学习-官方译文

    Run Loops Run loops是线程的一个基本构成部分.一个run loop 是一个事件处理循环,你可以使用它来处理线程收到的事件.设计run loop的目的就是可以使得线程在收到事件的时候处 ...

  9. MySQL:按后缀缀批量删除表格

    Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_schema='s ...

  10. pdf2htmlEX安装和配置

    1.下载 安装的依赖: sudo yum install cmake gcc gnu-getopt java-1.8.0-openjdk libpng-devel fontforge-devel ca ...