题目链接:https://ac.nowcoder.com/acm/problem/213861
到主站看:https://blog.csdn.net/weixin_43346722/article/details/110258124
题目
scimoon 做不出题,随手在纸上画了两个正圆
第一个圆圆心为 ,半径为
第二个圆圆心为 ,半径为
这两个圆的圆弧有没有交呢
输入
第一行一个正整数 ,表示数据组数
接下来 行,每行六个整数,分别为
,意义如题中描述一致
输出
输出共 行
对于每组数据,若有交则输出 YES
,否则输出 NO
样例输入
1 1 1 1 1 2 1
样例输出
YES
数据范围
对于所有数据,
思路
这道题是一道数学题。
要一个很坑的地方就是如果两个圆碰到了,就算是相交。
那可以看出两个圆碰不到有两种情况:
第一种(上图),可以很明显的看出是 。(
就是两个圆心之间的距离)
第二种(上图),那这又是怎么样呢?
是 。
那如果这两个条件都不满足,那就是相交,不然就是不相交。
代码
#include<cmath> #include<cstdio> #include<algorithm> using namespace std; int T; double x1, y11, r1, x2, y2, r2, dis; int main() { scanf("%d", &T); for (int times = 1; times <= T; times++) { scanf("%lf %lf %lf %lf %lf %lf", &x1, &y11, &r1, &x2, &y2, &r2); dis = sqrt((x1 - x2) * (x1 - x2) + (y11 - y2) * (y11 - y2));//算出两点距离 if (dis <= r1 + r2 && dis >= abs(r1 - r2)) printf("YES\n"); else printf("NO\n"); } return 0; }