Three Way Communications (COMM3)

keyword

平面幾何 C++

問題概要

2次元平面上に3つの点がある。点は半径R以内にある点と連結する。全ての点が連結しているかどうか判定する問題。

解法

3つのペアの内2組以上が繋がっていたらOK。

感想

codechefにも登録してみた。アカウント作る際に入力必須事項が多くて戸惑った。area pincodeって何だったんだろう。開始時刻丁度に目が覚めて登録してない!と焦ったけどそもそも登録はいらないらしかった。使える言語が豊富で、コンテストはテストケースの個数までちゃんと明記してあるのが良い。

int xs[3], ys[3];
int R;

inline int sq(int x){ return x*x; }

bool solve(){
    int cnt = 0;
    for(int i=0; i<3; i++){
        if(sq(xs[i]-xs[(i+1)%3]) + sq(ys[i]-ys[(i+1)%3]) <= sq(R)) cnt++;
    }
    return cnt>=2;
}

int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&R);
        for(int i=0; i<3; i++){
            scanf("%d%d",xs+i,ys+i);
        }
        puts(solve()?"yes":"no");
    }
    return 0;
}