タレット


タレット


質問する


チョ・ギュヒョンとペク・スンファンはタレットで働いている職員だ.しかし存在感がないため、人口を占めていない.次はチョ・ギュヒョンとペク・スンファンの写真だ.

李ソクウォンは、チョ・ギュヒョンとペク・スンファンに相手のマリンの位置を計算するように命令した.趙圭賢と白勝煥はそれぞれ自分のターンテーブルの位置から現在の敵までの距離を計算した.
曹圭賢の座標(x 1,y 1)と白勝煥の座標(x 2,y 2)が与えられ、曹圭賢が計算した劉在明との距離r 1と白勝煥が計算した劉在明の距離r 2が与えられた場合、プログラム出力に劉在明の座標数があるようにしてください.

入力


第1行は、試験例の個数Tを与える.各テストケースは次のとおりです.
1行はx 1,y 1,r 1,x 2,y 2,r 2を与える.x 1,y 1,x 2,y 2は−1000以上、10000以下の整数、r 1,r 2は10000以下の自然数である.

しゅつりょく


各テストボックスは、劉在明の位置がある可能性のある数を出力します.劉在明が存在する可能性のある位置の個数が無限大であれば−1を出力する.

コード#コード#

#include <iostream>

#include <math.h>

using namespace std;    

int main() {
    int T, x1, y1, r1, x2, y2, r2;
    float dist;

    scanf("%d", &T);

    for(int i = 0; i < T; i++) {
        scanf("%d%d%d%d%d%d", &x1, &y1, &r1, &x2, &y2, &r2);

        dist = sqrt(pow(x1-x2, 2) + pow(y1-y2, 2));
        if(dist == 0) { // 동심원
            if(r1 == r2) printf("-1\n"); // 같은 원
            else printf("0\n"); // 동심원이지만 지름이 다름
        } else if(dist > r1 + r2)
            printf("0\n"); // 외부에 있음
        else if(dist == r1 + r2 || dist + r1 == r2 || dist + r2 == r1)
            printf("1\n"); // 외접, 내접
        else if(dist + r1 < r2 || dist + r2 < r1)
            printf("0\n"); // 내부에 있음
        else printf("2\n");
    }
}

追加の説明


上の問題は、2つの円の位置関係についての内容を適用し、式に基づいて、
2つの円(x-x₁)² + (y-y₁)² = rナツメヤシ(x-xナツメヤシ)² + (y-y₂)² = r₂²問い合わせの交点個数の問題となります.
状況の数は下図の通りです.

(写真の出所:https://mathbang.net/101)
したがって,コードに上記の場合に分け,場合に応じて頂点の個数を出力する.(ただし、図では同心円は1つの場合であり、この問題には2つの円が同じ場合も含まれている.)
ソース:https://www.acmicpc.net/problem/1002