タイトルの意味
悪いコンピュータの束の座標との一連の操作を考えます
距離があまり良好であれば、コンピュータは、集合Dとみなすことができます
Oは、Sは、2台のコンピュータの問合せセットし、コンピュータではありません
トピック分析
明らかに互いに素-設定に問題はなく、コンピュータの良い面と悪い面を特定し、唯一の互いに素セットとの良好なコンピュータでへ
注意:あなたが聞かせている場合、[新しい]父は、コンピュータ[コンピュータ]を指しを修理し、それ以前に修理
別のコレクション内のコンピュータのコレクションという、間違っている可能性があります
その修理[]父[ポイント]新しいコンピュータが間違っていることはありません前に、この場合は、コンピュータを修理置きます
トピックコード
書式#include <iostreamの> 書式#include <stdio.hに> する#include < 文字列の.h> の#include <アルゴリズム> 使用して 名前空間はstdを、 typedefの長い 長いLL。 const int型 MAXN = 1007 ; INTのN、D、P、Q、修理[MAXN]、[MAXN] F。 チャー S [ 2 ]。 構造体ノード{ int型X、Y、OK。 } COM [MAXN]。 INT DIS(ノードA、ノードB){ リターン(AX-BX)*(AX-BX)+(AY-によって)*(ay- によって); } int型 のget(int型X){ 場合(F [X] == x)をリターンX。 他の リターン F [X] = GET (F [X]); } int型のmain(){ scanf関数(" %d個の%のD "、&N、&D)、D = D * D。 以下のために(int型 i = 1 ; iが<= N; iは++ ){ scanf関数(" %d個の%のD "、&COM [I] .X、&COM [I] .Y)。 COM [I] .ok = 0 。 F [I] = I。 } int型の CNT = 0 。 しばらく(〜のscanf("%S%D "、&S&P)){ もし、(S [ 0 ] == ' O ' ){ COM [P] .ok = 1 ; 修復[CNT ++] = P; のための(INT I = 0 ; iはCNT-< 1 I ++; ){ int型の FX = 得る(修理[i])と、FY = GET (P); 場合(DIS(COM [P]、COM [修復[I])<= D) F [FX] = FY; } } そうでない 場合(S [ 0 ] == ' S ' ){ scanf関数(" %のD "、&Q)。 int型の FX = 取得(p)を、FY = GET (Q); もし(FX == FY && COM [P] .ok && COM [Q] .ok)のprintf(" SUCCESSする\ n " ); 他のprintf(" FAIL \ nを" ); } } 戻り 0 。 }