题目链接: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;
}