タレット
タレット
質問する
チョ・ギュヒョンとペク・スンファンはタレットで働いている職員だ.しかし存在感がないため、人口を占めていない.次はチョ・ギュヒョンとペク・スンファンの写真だ.
李ソクウォンは、チョ・ギュヒョンとペク・スンファンに相手のマリンの位置を計算するように命令した.趙圭賢と白勝煥はそれぞれ自分のターンテーブルの位置から現在の敵までの距離を計算した.
曹圭賢の座標(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
Reference
この問題について(タレット), 我々は、より多くの情報をここで見つけました https://velog.io/@kkoala/01002-터렛テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol