板子题。可以转一下坐标防止被卡。精度和常数实在难以平衡。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. #define ll long long
  9. #define double long double
  10. #define N 1010
  11. char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
  12. int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
  13. int read()
  14. {
  15. int x=0,f=1;char c=getchar();
  16. while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
  17. while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
  18. return x*f;
  19. }
  20. int n;
  21. const double PI=acos(-1.0);
  22. double x[N],y[N],r[N];
  23. struct data
  24. {
  25. double x;int op;
  26. bool operator <(const data&a) const
  27. {
  28. return x<a.x;
  29. }
  30. }a[N<<1];
  31. const double eps=1E-7;
  32. double f(double k)
  33. {
  34. int m=0;
  35. for (int i=1;i<=n;i++)
  36. if (fabs(x[i]-k)<r[i])
  37. {
  38. double t=sqrt(r[i]*r[i]-(x[i]-k)*(x[i]-k));
  39. a[++m].x=y[i]-t,a[m].op=1;
  40. a[++m].x=y[i]+t,a[m].op=-1;
  41. }
  42. sort(a+1,a+m+1);
  43. double ans=0,cur;int u=0;
  44. for (int i=1;i<=m;i++)
  45. {
  46. if (u==0) cur=a[i].x;
  47. u+=a[i].op;
  48. if (u==0) ans+=a[i].x-cur;
  49. }
  50. return ans;
  51. }
  52. double simpson(double l,double r)
  53. {
  54. return (r-l)*(f(l)+f(r)+4*f((l+r)/2))/6;
  55. }
  56. double calc(double l,double r,double simp)
  57. {
  58. double mid=(l+r)/2,x=simpson(l,mid),y=simpson(mid,r);
  59. if (fabs(x+y-simp)<eps) return x+y;
  60. else return calc(l,mid,x)+calc(mid,r,y);
  61. }
  62. int main()
  63. {
  64. #ifndef ONLINE_JUDGE
  65. freopen("bzoj2178.in","r",stdin);
  66. freopen("bzoj2178.out","w",stdout);
  67. const char LL[]="%I64d\n";
  68. #else
  69. const char LL[]="%lld\n";
  70. #endif
  71. n=read();double L=2000,R=-2000;
  72. for (int i=1;i<=n;i++)
  73. {
  74. x[i]=read(),y[i]=read(),r[i]=read();
  75. double u=x[i]*sin(PI/3)+y[i]*cos(PI/3),v=x[i]*cos(PI/3)-y[i]*sin(PI/3);
  76. x[i]=u,y[i]=v;
  77. L=min(L,x[i]-r[i]),R=max(R,x[i]+r[i]);
  78. }
  79. #undef double
  80. printf("%.3f",(double)calc(L,R,simpson(L,R)));
  81. return 0;
  82. }

  

BZOJ2178 圆的面积并(simpson积分)的更多相关文章

  1. BZOJ 2178 圆的面积并 ——Simpson积分

    [题目分析] 史上最良心样例,史上最难调样例. Simpson积分硬上. 听说用long double 精度1e-10才能过. 但是double+1e-6居然过了. [代码] #include < ...

  2. [SPOJ-CIRU]The area of the union of circles/[BZOJ2178]圆的面积并

    [SPOJ-CIRU]The area of the union of circles/[BZOJ2178]圆的面积并 题目大意: 求\(n(n\le1000)\)个圆的面积并. 思路: 对于一个\( ...

  3. BZOJ 2178: 圆的面积并 [辛普森积分 区间并]

    2178: 圆的面积并 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1740  Solved: 450[Submit][Status][Discus ...

  4. BZOJ2178: 圆的面积并(格林公式)

    题面 传送门 题解 好神仙-- 先给几个定义 平面单连通区域:设\(D\)是平面内一区域,若属于\(D\)内任一简单闭曲线的内部都属于\(D\),则称\(D\)为单连通区域.通俗地说,单连通区域是没有 ...

  5. BZOJ2178 圆的面积并 计算几何 辛普森积分

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2178.html 题目传送门 - BZOJ2178 题意 给出 $n(n\leq 1000)$ 个圆,求 ...

  6. bzoj 2178 圆的面积并 —— 辛普森积分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2178 先看到这篇博客:https://www.cnblogs.com/heisenberg- ...

  7. bzoj2178: 圆的面积并

    Description 给出N个圆,求其面积并 Input 先给一个数字N ,N< = 1000 接下来是N行是圆的圆心,半径,其绝对值均为小于1000的整数 Output 面积并,保留三位小数 ...

  8. bzoj 2178 圆的面积并——辛普森积分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2178 把包含的圆去掉.横坐标不相交的一段一段圆分开算.算辛普森的时候预处理 f( ) ,比如 ...

  9. BZOJ 2178: 圆的面积并 (辛普森积分)

    code #include <set> #include <cmath> #include <cstdio> #include <cstring> #i ...

随机推荐

  1. Android学习之基础知识九 — 数据存储(持久化技术)之使用LitePal操作数据库

    上一节学习了使用SQLiteDatabase来操作SQLite数据库的方法,接下来我们开始接触第一个开源库:LitePal.LitePal是一款开源的Android数据库框架,它采用了对象关系映射(O ...

  2. 用statefulSet 部署持久化的OA(Tomcat)

    1.部署多个副本的OA(Tomcat)集群,其中一个Tomcat的需要加一个定时器,其他代码跟其他的Tomcat的代码一样.需要重启后也还是保持这个状态.代码如下: apiVersion: v1 ki ...

  3. C++11 并发指南三(std::mutex 详解)

    上一篇<C++11 并发指南二(std::thread 详解)>中主要讲到了 std::thread 的一些用法,并给出了两个小例子,本文将介绍 std::mutex 的用法. Mutex ...

  4. 前后端交互json字符串

    //将需要的参数转成json字符串,然后用utf-8编码 var obj = encodeURIComponent(JSON.stringify(this.categories),"utf- ...

  5. Python开发技巧

    1 python关闭windows进程 python关闭windows进程的方法,涉及Python调用系统命令操作windows进程的技巧 import os command = 'taskkill ...

  6. java json字符串传递给 js 时 特殊字符转义错误 研究

    一些换行 回车等符号需要转义 主要注意 单引号 与双引号. 一 如果js以 双引号接收字符串 则转单引号 "  至 \" 否则js报错 二 如果js以 单引号接收字符串 则转单引号 ...

  7. C# 时间戳与DateTime互转

    #region 转换时间为unix时间戳 /// <summary> /// 转换时间为unix时间戳 /// </summary> /// <param name=&q ...

  8. Flask-sqlalchemy 语法总结

    Flask-sqlalchemy 语法总结 ** DDLdb.create_all() :创建实体表db.drop_all(): 删除表 1)插入表Db.session.add(user) #user ...

  9. 生活沉思录 via 哲理小故事(一)

    1.小托蒂的悲剧 意大利小男孩托蒂,有一只十分奇怪的眼睛,因为从生理上看,这是一只完全正常的眼睛,但却是失明的. 原来,托蒂刚出生时,这只眼睛轻度感染,曾用绷带缠了两个星期.这对常人来说几乎没有人任何 ...

  10. NuGet 使用笔记

    环境准备 1. 下载nuget : https://www.nuget.org/downloads 2. 设置到环境变量Path, 使生效:在Cmd打入: set path=abc  关闭Cmd (C ...