几何题。。。

先把所有圆储存起来,然后对于每个圆我们求得之后放下的圆挡住了的部分,求个并集,并把没被挡到的周长加进答案。

  1. #include <cstdlib>
  2. #include <cstdio>
  3. #include <iostream>
  4. #include <cstring>
  5. #include <cmath>
  6. #include <cctype>
  7. #include <algorithm>
  8. #define rep(i, l, r) for(int i=l; i<=r; i++)
  9. #define pi acos(-1)
  10. #define maxn 1234
  11. typedef long long ll;
  12. using namespace std;
  13. inline int read()
  14. {
  15. int x=0, f=1; char ch=getchar();
  16. while (!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
  17. while (isdigit(ch)) x=x*10+ch-'0', ch=getchar();
  18. return x*f;
  19. }
  20. struct line{double l, r;} q[maxn*2];
  21. bool cmp(line a, line b){return a.l<b.l || (a.l==b.l && a.r<b.r);}
  22. double r[maxn], x[maxn], y[maxn];
  23. double dis(int a, int b){return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));}
  24. int main()
  25. {
  26. int n=read(); double ans=0;
  27. rep(i, 1, n) scanf("%lf%lf%lf", &r[i], &x[i], &y[i]);
  28. rep(a, 1, n)
  29. {
  30. int top=0;
  31. bool end=0; rep(b, a+1, n) if (r[a]+dis(a, b)<=r[b]) end=1; if (end) continue;
  32. rep(b, a+1, n) if (r[b]+dis(a, b)>r[a] && r[a]+r[b]>dis(a, b))
  33. {
  34. double r1=r[a], r2=r[b], d=dis(a, b), t, v;
  35. t=acos((r1*r1-r2*r2+d*d)/(2*d)/r1);
  36. v=atan2((x[a]-x[b]),(y[a]-y[b]));
  37. q[++top]=(line){v-t, v+t};
  38. }
  39. rep(i, 1, top)
  40. {
  41. if (q[i].l<0) q[i].l+=2*pi;
  42. if (q[i].l>2*pi) q[i].l-=2*pi;
  43. if (q[i].r<0) q[i].r+=2*pi;
  44. if (q[i].r>2*pi) q[i].r-=2*pi;
  45. if (q[i].l>q[i].r)
  46. q[++top]=(line){0,q[i].r}, q[i].r=2*pi;
  47. }
  48. sort(q+1, q+top+1, cmp);
  49. double now=0, tmp=0;
  50. rep(i, 1, top)
  51. {
  52. if (q[i].l>now) tmp+=q[i].l-now;
  53. now=max(now, q[i].r);
  54. }
  55. tmp+=2*pi-now;
  56. ans+=tmp*r[a];
  57. }
  58. printf("%.3lf\n", ans);
  59. return 0;
  60. }

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

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

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

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

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

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

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

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

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

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

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

  6. 1043: [HAOI2008]下落的圆盘

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1725  Solved: 743[Submit][Status][Discuss] Descripti ...

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

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

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

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

  9. 题解:[HAOI2008]下落的圆盘

    时空限制:1000ms / 128MB 原题链接: 洛谷 bzoj Description 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红 色线条的 ...

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

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

随机推荐

  1. Symfony相关网站参考

    http://www.doctrine-project.org/projects.html 数据库相关知识 http://firehare.blog.51cto.com/809276/703599整合 ...

  2. shiro学习记录(二)

    1 在项目中应用shiro框架进行认证 第一步:引入shiro框架相关的jar <!-- 引入shiro框架的依赖 --> <dependency> <groupId&g ...

  3. Oracle分页抽数存储过程

    --outTotal是需要返回的总数,v_loginUserId是传入的登录人ID,抽取他的客户,v_CurrPage是传入的第几页,v_pageSize传入的每页数据条数. ) FROM tb_cu ...

  4. fopen打开文件失败的问题

    fopen打开带中文路径或含中文名称的文件失败. 解决这个问题有两个方法:一是改用_wfopen,这个函数接受两个宽字符类型,函数原型如下: FILE* _wfopen(const wchar_t* ...

  5. 【转载】SQLServer中char、varchar、nchar、nvarchar的区别:

    (1)       定义: char:    固定长度,存储ANSI字符,不足的补英文半角空格. nchar:   固定长度,存储Unicode字符,不足的补英文半角空格 varchar:  可变长度 ...

  6. MultipartFile 动态决定是否上传文件,解决不上传文件报错

    controller 接收参数   用 HttpServletRequest 代替 @RequestParam()  接收参数 picFile 前台 传文件的参数名字  ,   这样 前段 传 nul ...

  7. JZOJ 3493. 【NOIP2013模拟联考13】三角形

    3493. [NOIP2013模拟联考13]三角形(triangle) (File IO): input:triangle.in output:triangle.out Time Limits: 10 ...

  8. 权限组件(15):rbac的使用文档和在业务中的应用

    这里用主机管理系统当做示例. 一.将rbac组件拷贝到项目中. 注意: rbac自己的静态文件.layout.html(被继承的模板).bootstrap.fontsize.公共的css.jquery ...

  9. 802. Find Eventual Safe States

    https://leetcode.com/problems/find-eventual-safe-states/description/ class Solution { public: vector ...

  10. 8、python中的集合

    集合是python中无序.可变的数据结构.集合与字典类似,集合中的元素必须是可哈希的(等同于字典中的键),也就是说集合中的元素是唯一.不可变的数据类型.这里前面说集合可变,后面又说集合中的元素不可变是 ...