hdu 5120(容斥+圆相交部分面积)
来源:互联网 发布:如何提高精气神 知乎 编辑:程序博客网 时间:2024/06/06 01:11
题目链接:点击打开链接
分析:求元环相交部分面积,容斥一画图就出来了;
代码如下:
#include<cmath>#include<cstdio>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>const double esp=1e-10;using namespace std;struct Circle{ double x,y; double r;};double calArea(Circle c1, Circle c2){ double d; double s,s1,s2,s3,angle1,angle2; d=sqrt((c1.x-c2.x)*(c1.x-c2.x)+(c1.y-c2.y)*(c1.y-c2.y)); if(d>=(c1.r+c2.r))//两圆相离 return 0; if((c1.r-c2.r)>=d)//两圆内含,c1大 return acos(-1.0)*c2.r*c2.r; if((c2.r-c1.r)>=d)//两圆内含,c2大 return acos(-1.0)*c1.r*c1.r; angle1=acos((c1.r*c1.r+d*d-c2.r*c2.r)/(2*c1.r*d)); angle2=acos((c2.r*c2.r+d*d-c1.r*c1.r)/(2*c2.r*d)); s1=angle1*c1.r*c1.r;s2=angle2*c2.r*c2.r; s3=c1.r*d*sin(angle1); s=s1+s2-s3; return s; } //圆相交部分的面积int main(){ int t; scanf("%d",&t); int k=1; while(t--){ Circle a,b,c,d; double R,r; scanf("%lf%lf",&r,&R); double x,y; scanf("%lf%lf",&x,&y); a.x=b.x=x; a.y=b.y=y; a.r=r; b.r=R; scanf("%lf%lf",&x,&y); c.x=d.x=x; c.y=d.y=y; c.r=r; d.r=R; double ans=calArea(b,d)-calArea(b,c)-calArea(d,a)+calArea(a,c); printf("Case #%d: %f\n",k++,ans); } return 0;}
0 0
- hdu 5120(容斥+圆相交部分面积)
- hdu 5120 Intersection (容斥原理+圆的相交面积模板)
- hdu-5120(两圆相交面积)
- hdu 5120 Intersection(两圆相交面积)(模板)
- hdu 5120 Intersection(求相交圆的面积)
- hdu 5120 Intersection(求相交圆的面积)
- hdu 5120 圆相交面积+组合数学
- HDU-5120-Intersection【几何-相交圆面积】
- HDU 5120 Intersection 圆相交面积
- hdu 5120 Intersection (圆相交面积模板)
- 计算两个圆相交部分的面积
- 模版--两圆相交部分面积
- HDU-5858:Hard problem(相交圆面积)
- HDU 3264 Open-air shopping malls(两圆相交公共部分面积 二分答案)
- HDU 4404 Worms(任意多边形与圆相交部分的面积)
- hdu 5120 Intersection(求相交环面积)
- Hdu 5120 Intersection【计算圆环相交面积】
- HDU 5120 Intersection 求两圆相交面积模板
- Android自定义view之ProgressBar的实现
- java 内存映射处理大文件
- JavaScript学习--Item7 函数和(命名)函数表达式
- java多态机制
- bzoj 2038 小Z的袜子 莫队模板
- hdu 5120(容斥+圆相交部分面积)
- map和multimap 详解
- Game of Life
- C++作业6
- nyoj290 动物统计加强版
- nginx服务器安装及配置文件详解
- java设计模式-桥接模式
- poj 1190 生日蛋糕(深搜+剪枝技巧)
- 【Java学习-J.160525.0.18】JNDI数据库连接池创建步骤