hdoj-5120-Intersection【数论】

Intersection

Time Limit: 4000/4000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)

Total Submission(s): 964 Accepted Submission(s): 368

Problem Description

Matt is a big fan of logo design. Recently he falls in love with logo made up by rings. The following figures are some famous examples you may know.

A ring is a 2-D figure bounded by two circles sharing the common center. The radius for these circles are denoted by r and R (r < R). For more details, refer to the gray part in the illustration below.

Matt just designed a new logo consisting of two rings with the same size in the 2-D plane. For his interests, Matt would like to know the area of the intersection of these two rings.

Input

The first line contains only one integer T (T ≤ 105), which indicates the number of test cases. For each test case, the first line contains two integers r, R (0 ≤ r < R ≤ 10).

Each of the following two lines contains two integers xi, yi (0 ≤ xi, yi ≤ 20) indicating the coordinates of the center of each ring.

Output

For each test case, output a single line “Case #x: y”, where x is the case number (starting from 1) and y is the area of intersection rounded to 6 decimal places.

Sample Input

2
2 3
0 0
0 0
2 3
0 0
5 0

Sample Output

Case #1: 15.707963
Case #2: 2.250778

Source

2014ACM/ICPC亚洲区北京站-重现赛(感谢北师和上交)

Recommend

liuyiding | We have carefully selected several similar problems for you:
5338 5337 5336 5335 5334

注意: Pi 不能自己写,要用acos(-1.0) ,在这里WA了好多次

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
double dis,R,r;
struct point{
	double x,y;
}a,b;
const double pi=acos(-1.0);
double S(double r1,double r2){
	if(dis>=(r1+r2)) return 0; //外切或不相交
	double s1,s2,sit1,sit2;
	if(dis<=fabs(r1-r2)){  //内切或内含
		r1=min(r1,r2);
	    return pi*r1*r1;
	}
	s1=(r1*r1+dis*dis-r2*r2)/(2*r1*dis);
	s2=(r2*r2+dis*dis-r1*r1)/(2*r2*dis);
    sit1=acos(s1);
    sit2=acos(s2);
	return sit1*r1*r1+sit2*r2*r2-r1*dis*sin(sit1);

}
int main(){
	int t,cas=0;
	scanf("%d",&t);
	while(t--){
		++cas;
		scanf("%lf%lf",&r,&R);
		scanf("%lf%lf",&a.x,&a.y);
		scanf("%lf%lf",&b.x,&b.y);
	    dis=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
	    if(fabs(dis)<1e-7){
	    	printf("Case #%d: %.6lf\n",cas,pi*(R*R-r*r));
	    	continue;
	    }
		double ss=0;
		ss=S(R,R);
		ss-=2*S(R,r)-S(r,r);
		printf("Case #%d: %.6lf\n",cas,ss);
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-09 12:20:34

hdoj-5120-Intersection【数论】的相关文章

HDOJ 5120 Intersection 两圆面积交

两圆面积交.... Intersection Time Limit: 4000/4000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Submission(s): 101    Accepted Submission(s): 38 Problem Description Matt is a big fan of logo design. Recently he falls in love with l

hdu 5120 Intersection 圆环面积交

Intersection Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5120 Description Matt is a big fan of logo design. Recently he falls in love with logo made up by rings. The following figures are some famous examples

hdu 5120 Intersection

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 A ring is a 2-D figure bounded by two circles sharing the common center. The radius for these circles are denoted by r and R (r < R). For more details, refer to the gray part in the illustration bel

hdu 5120 - Intersection(解题报告)

Intersection Time Limit: 4000/4000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Submission(s): 1036    Accepted Submission(s): 407 Problem Description Matt is a big fan of logo design. Recently he falls in love with logo made

HDU 5120 Intersection(圆的面积交)

题目大意:给你两个圆环,让你求出来圆环的面积交,需要用到圆的面积交,然后容斥一下,就可以得到圆环的面积交.画一下图就会很清晰. Intersection Time Limit: 4000/4000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Submission(s): 526    Accepted Submission(s): 226 Problem Description Matt is a b

HDU 5120 Intersection(2014北京赛区现场赛I题 计算几何)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 解题报告:给你两个完全相同的圆环,要你求这两个圆环相交的部分面积是多少? 题意看了好久没懂.圆环由一个大圆里面套一个小圆,中间部分就是圆环,两圆环相交面积 = 大圆相交的面积 - 2*大圆与小圆相交的面积 + 小圆与小圆相交的面积. 也就是说,这题就可以化为求两个圆的相交的面积了.可以利用两个圆的方程,求出圆的交点所在的直线,然后求出圆心到这条直线的距离,就可以求出两个圆对应的扇形的圆心角是多

HDU 5120 Intersection(几何模板题)

题意:给定两个圆环,求两个圆环相交的面积. 思路:由于圆心和半径不一样,分了好多种情况,后来发现只要把两个圆相交的函数写好之后就不需要那么复杂了.两个圆相交的面积的模板如下: double area_of_overlap(point c1, double r1, point c2, double r2) { double d = dist(c1, c2); if (sgn(d - r1 - r2) >= 0) return 0; if (sgn(fabs(r1 - r2) - d) >= 0)

HDU 5120 Intersection (求圆环相交面积)

题意:给定圆环的内径r和外径R,以及2个相同圆环的圆心,求两个圆环的相交面积. 思路: S = A大B大 - A大B小 - A小B大 + A小B小.(A表示A环,大表示大圆,B同) 1 #include <iostream> 2 #include <queue> 3 #include <stack> 4 #include <cstdio> 5 #include <vector> 6 #include <map> 7 #include

几何统计 ACM ICPC

2014 ACM ICPC 广州现场赛 HDU 5128 The E-pang Palace HDU 5134 Highway HDU 5135 Little Zu Chongzhi's Triangles 2014 ACM ICPC 北京现场赛 HDU 5120 Intersection 2014 ACM ICPC 上海网络赛 HDU 5048 (待做,三维几何)

HDOJ Intersection 5120【环相交面积】

Intersection Time Limit: 4000/4000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Submission(s): 949    Accepted Submission(s): 360 Problem Description Matt is a big fan of logo design. Recently he falls in love with logo made