cf599 DIV2 A / B1 / B2 / C

https://codeforces.com/contest/1243
Aタイトル 数をN、最大Qは正方形辺の長さで構成することができ、N <= 1E3、最大裏面行値バケットを出力します

B1の質問は唯一の2つの文字列が等しい作ることができる1、直接シミュレーションを交換する2つの文字列を依頼します

B2の質問 2つの長さのn小文字の文字列目に、そのような同じスイッチング周波数と少ない2N以上2つの文字列を切り替えること二つの文字列かどうかを尋ね、 

それぞれの文字が表示された回数を記録し、奇数が成功することはできませんがある場合は、それ以外の場合は毎回の性格S [i]を列挙します。:

  私は文字の後ろだ場合はSを持っている[J]がSに等しい[i]は、Sの交換の[J] T [i]は、

  別のは、S [i]がTに等しく[j]は、最初の交換S [J] T [J]であり 、 次に交換S [J] T [i]は 、
順序を変更2N場合、各回の最大缶ベクトル<ペア<int型、int型> > 保存することができ

問題C    N <= 1E12は、nは、... 1 n個のブロックは、2つijの各場合、着色される必要がある| J - I | = X、 X nは、同じ2つの色が必要非ijの因子で
依頼します最大いくつかの色に、Iは、N、P pの素因数の一方のみがあれば色の最大値が1 ...... P 1を描いていることが理解...... Pように
 二つまたは二つ以上の素因数、次いで、PQ、それがある場合Mの任意の数のすべてのブロックが同じ色であるように、AP + BQ = Mのように表すことができます。 

 

#include <ビット/ STDC ++ H> // cf599 DIV2 
使用 名前空間STDを、
#defineっ長い長
 の#define _for(I、B)のための(INT I =(); I <(B)、I ++)
 の#defineため_rep(I、B)(INT I =() ; I <=(B); I ++)
 の#define _per(I、B)のための(INT I =(); I> =(B); i--)ボイドtaskA(){
     int型T、N。
    cinを >> トン。
    一方、(t-- ){ 
        CIN >> N。
        INT [ 1010 ] = {}、X、MA、RET = 0 
        _rep(I、1、n)がCIN >> X、[X] ++

; 

        _per(I、nは、1 ){ 
            RET + = A [i]は、
            もし(RET> = I){MA = I。休憩;} 
        } coutの <<ミリアンペア<< てendl; 
    } 
} 
ボイドtaskB(){
     int型T、N。
    cinを >> トン。
    一方、(t-- ){ 
        CIN >> N。CIN。取得();
        文字列S1、S2; getline(CIN、S1)。getline(CIN、S2)。
        INT X = 0、Y = 0、CNT = 0 
        _for(I、0 、N){
             もし!(S1 [I] = S2 [i])と{ 
                CNT ++ もし(!x)はx = I + 1 ;
                それ以外の 場合(!y)は、Y = I + 1 ; 
            } 
        } 
        もし(X && Y){ 
            X - 、y-- チャー C1 = S1 [X]、C2 = S2 [Y]。
            S1 [X] = C2、S2 [Y] = C1。    
        } 
    // COUT << C1 << "" << C2 << "" << S1 << "S2 =" << S2 << ENDL。
        0)&& S1 == S2)はcout << " はい\ n個" ;
        他の裁判所未満<< " ノー\ n個" ; 
    } 
} 
ボイドtaskC(){
     int型、T、N。
    cinを >> トン。
    一方、(t-- ){ 
        CIN >> N。 
        文字列S1、S2; 
        CIN。取得(); 
        CIN >> S1 >> S2;
        INT X = 0、Y = 0、CNT = 0、CNT1 [ 26 ] = {}、26 ] = {}; 
        _for(I、0 、N){ 
            CNT1 [S1 [i]が - [ A ' ] ++ ; 
            CNT1 [S2 [i]を - ' A ' ] ++ ; 
        } 
        int型フラグ= 0 
        _for(I、026であれば(CNT1 [I]&1){フラグ= 1ブレーク;}
         もし(フラグ)COUT << " いいえ\ n " 他に  {         
             場合(S1 == S2)続けます
            ベクトル <ペア< int型int型 >> ANS; 
            _for(I、0 、N)
                _for(J、I + 1 、N){
                     場合(S1 [i]が== S1 [J]){   
                        スワップ(S1 [J]、S2 [i])と; 
                        ans.push_back(make_pair(J、I)); 
                        休憩; 
                    } 
                   そう であれば(S1 [i]が== S2 [J]){ 
                       スワップ(S2 [J]、S1 [N - 1 ])。
                       スワップ(S2 [i]は、S1 [N -1 ])。
                       ans.push_back(make_pair(N - 1 、J))。
                       ans.push_back(make_pair(N - 1 、I))。
                       休憩; 
                    } 
            } 
            アサート(S1 == S2)。
            裁判所未満 << " はい\ n個" ; COUT << ans.size()<< ENDL。
            _for(I、0、ans.size())COUT << ANS [i]が1次回+ 1 << "  " << ANS [I] .second + 1 << ENDL。    
} 
ボイドtaskD(){ 
    LL N。cinを >> N; 
    LL Q = SQRT(n)は、CNT = N。
    _rep(I、2 、Q){
         場合(N%I)続けます一方、(N%I == 0)N / = I。
    // coutの<< "N =" << N <<てendl;    
        もし(N == 1)COUT << I << ENDL。
        他の裁判所未満<< " 1 \ nは" ;
        リターン; 
    } 
    COUT << N << ENDL。
//taskA();
    // taskB();
    // freopenは( "output.txtと"、 "W"、STDOUT);
    // taskC(); 
    taskD();
    リターン 0 ;   
} 
/ * 
4 
5 
浸すの
houhe 
3 
、犬
2 
AA 
AZ 
3 
ABC 
BCA 
* /

 

おすすめ

転載: www.cnblogs.com/163467wyj/p/11839198.html