優遇ダブル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 [] = { 1、11、111、1111、11111、111111、1111111、11111111、111111111 }。 以下のために(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 = - 1。int型 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 。 }