彗星OJ - コンテスト#15問題の解決

優遇ダブル11(簡易版)

 N <= 1E19、1E9> 1(8)

https://www.cometoj.com/contest/79/problem/A?problem_id=4198

#include <ビット/ STDC ++ H> 使用して名前空間STDを、INT のmain(){
     int型の T。>> CIN トン。 
    一方、(t-- ){
         int型 CNT1 = 0 int型のn; cinを>> N;
        INT PR [] = { 111111111111111111111111111111111111111111111 }。
        以下のためにint型私は= 8 ; I> = 0

 

; i-- ){ 
            CNT1 + = N / PR [I]; 
            N%= PR [i]は、
        } 
        であれば(CNT1> 9)COUT << " 不可\ n " 他の coutの<< CNT1 << てendl; 
    } 
    戻り 0 
}

Dバージョンの難しさ

https://www.cometoj.com/contest/79/analysis  ないミスを通過// DM GET一緒にオンライントピック、

 特定のバンド、1111111111と仮定することができる............

 次いで、これを実施例234のために10進数の16進数に変換される - > 2,1,1(2×111 + 1 * 11 + 1) 

 「かなりの数」の数の合計で16進数が必要で、我々は最後のものを除いて、他の桁は9時00分よりも大きい場合、小さなバンドに変換できることがわかります
 例11,0のために0 - > 1,0,10,0 10,0,1,0 - > 1,0,0,0,10  
 その後、私たちすることができます。この下のI I番目のバイナリ数、16進数のテイクの貢献として、

 11,0,0 - > 1,0,10,0(3 * 11 * 4 = 331 = 14 + 10 * 1)10,0,1,0 - > 1,0,0,0,10(10 = 15 * 4 + 2 = 421 * 5 + 10) 
 以上9桁(ない最後のもの)は小さなバンド寄与にある場合に小さいことがわかりますので、我々は小さなに彼を持つことができ従って、選択貪欲自然に沿った
 結論10進数は、現在のミートの最大可能な「かなりの数」と、「かなりの数」で表される最小数の「かなりの数」が費やさ前記

 

 

私たちが一緒にいるB、同心

https://www.cometoj.com/contest/79/problem/B?problem_id=4199

#include <ビット/ STDC ++。H>
 に#define LLロングロング
 // 暴力列挙各中心から等距離の複数のポイントを有することができ、センターとして使用される座標、ANS = F + [CNT1]
 // 各浮動小数点精度誤差が平方根の関数を変化させるように、別の中心までの距離と、アレイの中心点と点とは、LL交流することができない、いくつかの並べ替えをシーク
距離//はあたりマップメモリによって得ることができます、
使用して 名前空間STDを、 LLのDIST(LLのX1、Y1 LL、LL X2、Y2 LL){ リターン((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1- Y2)); } int型メイン(){ int型T; T = 1 ; // CIN >> T; 一方(T-- ){ int型 N-; CIN >> N-; INT ANS = 0; // ベクトル<ペア<整数、整数>>ドット(N + 1)。 LL DX [ 2020 ]、DY [ 2020 ]。 INT iは= 0、I <N; I ++)CIN >> DX [I] >> DY [I]。 INT iは= 0 ; I <N I ++ ){ int型、X = I。 ベクトル <LL> DIS; INT J = 0 ; J <nであり、j ++ ){ 場合(私は== j)を続けます LL distan =DIST(DX [I]、DY [i]は、DX [J]、DY [J])。 dis.push_back(distan)。 // coutの<< "私は=" << I << "DIS =" << distan <<てendl <<てendl; } ソート(dis.begin()、dis.end())。 LL Y = - 1int型 CNT1 = 1 ; INT J = 0 ; J <N- 1 ; J ++ ){ // COUT << DIS [J] << "Y =" << Y << "CNT1 =" << CNT1 << ENDL << ENDL。 もし(DIS [J] == Y)CNT1 ++ 1)*(cnt1- 2)/ 6 )。 Y = DIS [J]。CNT1 = 1 } } // COUT << "ANS =" << ANS << "CNT1 = "<< CNT1 <<" F [CNT1" << F [CNT1] << ENDL << ENDL。 ANS + =(CNT1 *(cnt1- 1)*(cnt1- 2)/ 6 )。 // coutの<< "111 \ n個!"; } COUT << ANS << ENDL。 } 戻り 0 }

 

<ビット/ STDC ++ H>の#include
 の#define LL長い長い
 // 看了题解、稍微优化了下
用いて 名前空間STDを、
LL DIST(LL X1、Y1 LL、LL X2、Y2 LL){ リターン((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1- Y2));}
 int型のmain(){
     int型トン; 
    T = 1 一方、(t-- ){
         int型のn; CIN >> N。
        int型 ANS = 0 ;
        // ベクトル<ペア<整数、整数>>ドット(N + 1)。
        LL DX [ 2020 ]、DY [ 2020 ]。
        以下のためのint型私は= 0をI <N; I ++)CIN >> DX [I] >> DY [i]は、
        INT iは= 0 ; I <N I ++ ){ 
            ベクトル <LL> DIS。
            INT J = 0 ; nはJ <; J ++ ){ 
                dis.push_back(DIST(DX [I]、DY [i]は、DX [J]、DY [J]))。
            } 
            ソート(dis.begin()、dis.end())。
            INT J = 0、K、J <N; J = K){
                 ため(K = J; DIS [K] == DIS [J]; K ++ )。
                ANS+ =(KJ)*(kj- 1)*(kj- 2)/ 6 
            } 
        } 
        COUT << ANS << ENDL。
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/163467wyj/p/11939346.html
おすすめ