HDU5120 - Intersection


做法:答案就是\(A1 \cap B1 - A2 \cap B1 - A1 \cap B2 + A2 \cap B2\),圆形面积交码了好久,先把两个圆转到x轴上,大的放到原点,小的放在大圆的左边,计算一下交点坐标,然后讨论即可。

#include <bits/stdc++.h>
#define pb push_back
typedef long long ll;
const double eps = 1e-10;
const double PI = acos(-1.0);
using namespace std;
int sgn(double x) {if(fabs(x) < eps) return 0;if(x < 0) return -1;return 1;
}
int n;
struct cir{double x,y,r;cir(){}cir(double _x,double _y,double _r) {x=_x; y=_y; r=_r;}void output() {cout << x <<' '<< y <<' '<< r << endl;}
}a1, a2, b1, b2;
double dis(double ax,double ay,double bx,double by) {return sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by));
}
double area_t(double a,double b,double c) {if(a+b <= c) return 0;if(a+c <= b) return 0;if(c+b <= a) return 0;if(abs(a-b) >= c) return 0;if(abs(c-b) >= b) return 0;if(abs(a-c) >= a) return 0;double p = (a+b+c)*0.5;return sqrt((p-a)*(p-b)*(p-c)*p);
}
void chg(cir &a, cir &b) {if(a.r < b.r) swap(a,b);double D = dis(a.x,a.y,b.x,b.y);a.x = a.y = 0;b.x = D; b.y = 0;
}
double cal(cir a, cir b) {chg(a, b);double D = dis(a.x,a.y,b.x,b.y), ans = 0;if(sgn(D- (a.r+b.r))>= 0) return 0;if(sgn(a.r-b.r-D)>=0) return PI*b.r*b.r;double cx = (a.r*a.r + D*D - b.r*b.r)*0.5/D;double cy = sqrt(a.r*a.r - cx*cx);if(sgn(cx - b.x) <= 0) {double S1 = D*cy;double tha = asin(cy/a.r)*2;double thb = asin(cy/b.r)*2;double Sa = a.r*a.r*tha*0.5;double Sb = b.r*b.r*thb*0.5;ans = Sa + Sb - S1;}else {double tha = asin(cy/a.r)*2;double thb = 2*PI-asin(cy/b.r)*2;double Sa = a.r*a.r*tha*0.5 - area_t(a.r,a.r,cy*2);double Sb = b.r*b.r*thb*0.5 + area_t(b.r,b.r,cy*2);ans = Sa + Sb;}return ans;
}
int T, CC = 0;
int main() {scanf("%d",&T);while(T--) {double r,R,tx1,tx2,ty1,ty2;scanf("%lf%lf",&r,&R);scanf("%lf%lf",&tx1,&ty1);scanf("%lf%lf",&tx2,&ty2);a1 = cir(tx1,ty1,R);a2 = cir(tx1,ty1,r);b1 = cir(tx2,ty2,R);b2 = cir(tx2,ty2,r);double ans = cal(a1,b1) - cal(a2,b1) - cal(a1,b2) + cal(a2,b2);printf("Case #%d: %.6f\n",++CC,ans);}
}

转载于:https://www.cnblogs.com/RRRR-wys/p/9710574.html

HDU5120 - Intersection相关推荐

  1. 信息学竞赛中的数学知识 --- 容斥原理

    C++基础数论-----容斥原理 C++基础数论-----容斥原理_C2020lax的博客-CSDN博客_容斥原理c++ C++数论容斥原理----无关的元素 C++数论容斥原理----无关的元素 - ...

  2. CF 1093 E. Intersection of Permutations

    E. Intersection of Permutations 链接 题意: 给定两个序列,询问第一个排列的[l1,r1]和第二个排列[l2,r2]中有多少个共同的数,支持在第二个排列中交换两个数. ...

  3. 【leetcode75】Intersection of Two Arrays(数组的交集)

    题目描述: 给定两个数组求他们的公共部分,输出形式是数组,相同的元素只是输出一次 例如: nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2]. 原文描述: ...

  4. 一个Apache CollectionUtils.intersection 方法的简单问题

    2019独角兽企业重金招聘Python工程师标准>>> 今天在使用CollectionUtils.intersection()  的时候,发现个问题,明明两个集合中有几个完全相同的类 ...

  5. Python计算两个numpy数组的交集(Intersection)实战:两个输入数组的交集并排序、获取交集元素及其索引、如果输入数组不是一维的,它们将被展平(flatten),然后计算交集

    Python计算两个numpy数组的交集(Intersection)实战:两个输入数组的交集并排序.获取交集元素及其索引.如果输入数组不是一维的,它们将被展平(flatten),然后计算交集 目录

  6. python 集合set 的三大方法intersection union difference来处理文氏图

    TODO - 练习:A或B,但不能同时包含 编写一个函数,将两个集合(set_a和set_b)作为输入,并返回一个新的集合,其中包含set_a或set_b中的元素,但不包含两者兼有的元素. 在上面的文 ...

  7. Leetcode: Intersection of Two Arrays

    Given two arrays, write a function to compute their intersection.Example: Given nums1 = [1, 2, 2, 1] ...

  8. Intersection of Two Linked Lists——经典问题

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...

  9. [Swift]LeetCode160. 相交链表 | Intersection of Two Linked Lists

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

最新文章

  1. Storm 03_Storm 架构设计
  2. 如何读取指针指向的地址空间呢?
  3. python怎么安装request_【python】如何安装requests
  4. 利用Kubernetes名称空间来管理内存和CPU资源(三)
  5. android 读取txt转为utf-8乱码,彻底解决android读取txt乱码终极方案
  6. UVA11556 Best Compression Ever【位运算】
  7. TensorFlow入门:计算图和梯度流
  8. 学校计算机的使用作文,电脑课上作文(3篇)
  9. 我靠! 算你运气好 a joke
  10. qt制作漂亮的登录界面,仅供参考
  11. “舱驾融合”技术发展趋势分析
  12. cad怎么倒圆角_CAD哪些技巧是菜鸟必备,哪些又让你相见恨晚?
  13. vb mysql登录界面_vb.net 简单上机登陆(面向过程思维)
  14. 《惢客创业日记》2021.01.22(周五)英雄心,狗熊命?
  15. ajax treegrid 选中,easyui treeGrid异步加载子节点示例
  16. rtl8168的黑苹果网卡通用驱动10.7,10.8,10.9一直支持。
  17. vue组件间通信六种方式
  18. 分享100个ASP源代码总有一个是你想要的
  19. 计算机考研复试之数据结构
  20. 遇到问题:(已解决)Texpad无法编译--“未找到TeX发型版 没有在您的系统中找到TeX发行版。....或安装您的TeX发行版”

热门文章

  1. linux多内核调度,linux-kernel – 如何在Linux内核(Samsung Exynos5422)中实现异构多处理(HMP)调度?...
  2. http referer 验证防御方法_渗透测试 跨站攻击防御与安全检测手法剖析
  3. Java项目几个月能完成_c#项目转JAVA,第5个月,基本完成
  4. linux下找不到libc 库,Linux-覆盖libc open()库函数
  5. PHP防QQ列表右划,react native 实现类似QQ的侧滑列表效果
  6. Leetcode 数据结构与算法题解大全——目录(推荐收藏,持续更新)
  7. 链表基础概念与经典题目(Leetcode题解-Python语言)
  8. 初探react,用react实现一个todoList功能
  9. python原理及代码_原理+代码|详解层次聚类及Python实现
  10. [Java网络编程基础]网络编程概述,三要素,IP地址