ICPCアジア徐州2019 K.センターのための予備コンテスト

トピックへのリンク:https://nanti.jisuanke.com/t/41393

タイトル効果:分析n個の点に加え、このような対称の中心点すなわち点Qの最小数。

ソリューション:

2点は、中心点を決定することができる、中心点のO(N ^ 2)列挙中心点、提供CNT [Xcの] [Ycを(Xcの、Ycのは)個であります
回数については、
次に中心点(Xcの、Ycの)、N-2 * CNT [Xcの] [Ycの】補うために必要なポイント数 - 元に(点(Xcの、Ycの)を
セット内の点の数)が表示されます、
あなたは、マップやハッシュ値cnt記録することができます。
入力座標が2で乗算された場合に加えて、すべての整数上の中心点の座標を列挙します。
#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
typedefの長い 長いLL。
構造体ST { 
    LLのX、Y。
} STM [ 1005 ]。
マップ <LL、int型 > 融点; 
マップ <LL、int型 > MP1。
セット <LL> SE。
constの LLのTEM = 1E7; 
キュー <LL> QUE。
マップ <LL、int型 > VIS;
INT のmain(){
     int型のn; 
    scanf関数(" %d個"、&N);
    int型 MAXS = 0 ;
    以下のためにint型 i = 0 ; iがn <I ++は{)
        のscanf(" %のLLDの%のLLD "、およびSTM [I] .X、およびSTMを[I] .Y)。
        STM [I] .X * = 2 ; 
        STM [I]・Y * = 2 ; 
        LL TT = STM [I]・X * TEM + STM [I] .Y。
        MP [TT] ++ ; 
    } 
    のためにint型 I = 0 ; iがN <; Iは++ ){
         ためINT J = 0 ; J <N; J ++){
             場合(iは< j)を{ 
                LL TT =(STM [I]・X + STM [J] .X)/ 2 * TEM +(STM [I] .Y + STM [J]・Y)/ 2 int型のカウント= ++ MP1 [TT]。
                もし(>カウント{MAXS)を
                    MAXS = 数えます。
                    しばらく(!que.empty())que.pop(); 
                    que.push(TT)。
                } 
                そう であれば(==カウントMAXS)を{ 
                    que.push(TT)。
                } 
            }       
        } 
    } 
    int型= ANS N-; 
   
    ながら(!{que.empty())
        LL TT = que.front(); 
        que.pop(); 
        ANS =分(ANS、N - MP1 [TT] * 2 - (MP [TT]&1 ));
         IF(MP [TT]&1。 BREAK ;
     //     COUT TT << << ENDL; 
    }
     ためint型 I = 0 ;私は<N-; Iは++){ // 場合を考える原点に中心点 
        LL STM = TT [I] .X + * TEM STM [I] .Y; 
        ANS =分(ANS、N - MP1 [TT] * 2 - (MP [TT]&1。)); 
    }
    printf(" %d個の\ n " 、ANS)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/Zhi-71/p/11489392.html