互いに素セット--POJ-2236

タイトルの意味

悪いコンピュータの束の座標との一連の操作を考えます

距離があまり良好であれば、コンピュータは、集合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型 のgetint型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 
}

 

おすすめ

転載: www.cnblogs.com/helman/p/11234278.html
おすすめ