Codeforcesラウンド#628(本部2)

説明の最初の章のように見えはしないでくださいグー

 


問題のA.

問題の意味

数xが与えられ、構成は、2つの正の整数、bは、必要とするようにGCD(A、B)+ LCM(A、B)= X。(X <= 1E9)

ソリューション

単純な構造、被験者の要件を満たす= 1、B = X-1。

コード

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
INT T、N。
INT メイン(){ 
    scanf関数(" %のD "、&T)。
    一方、(T - ){ 
        scanf関数(" %のD "、&N)
        printf(" %D%D \ n "1、N - 1 )。
    } 
    戻り 0 
}

 


問題のB.

問題の意味

アレイA1、A2、A3所与、......、新規性の、コピーされたn回のアレイ(すなわち、A1、A2、...、A1、A2、...、A1、......)、配列最長シーケンスの長さが増します。

ソリューション

分析は、元の配列はm個の要素の重複数を除いたと仮定すると、最長のサブシーケンスの長さMは、選択の数は確かに繰り返される超えている場合、定義された最も長いシーケンスの増加を満たしていない(もっとmより上昇することができません)。アレイにおけるIのi番目のアレイ採取多数の前後が最も長いシーケンスの数mの増加を有するように構成されています。

したがって、常に最も長いシーケンス長は、溶液Mの存在下で増加されています。

コード

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
CONST  INT N = 1E5 + 5 INT T、N、[N]。
INT メイン(){ 
    scanf関数(" %のD "、&T)。
    一方、(T - ){ 
        scanf関数(" %のD "、&N)
        マップ < int型ブール > 融点;
        int型 ANS = 0 ;
        以下のためにINT iが= 1 ; I <= N; I ++){
            scanf関数(" %のD "、および[I])。
            もし(!MP [[I]]) 
                ANS ++ ; 
            MP [I] = 
        } 
        のprintf(" %dの\ n " 、ANS)。
    } 
    戻り 0 
}

 


問題のC.

問題の意味

どのような問題の書き込みスパイシーなチキンの事に直面し、それが質問3分のタイトル曲のタイトル1分書かれた質問を見るために45分の5分ほしいですしました

ツリーは、請求項0,1,2にN-1、Nのノードをエッジ与え、...、N-2、全ての側面上付き文字で定義されているUのツリーを除いMEX(U、V)側部値以外のすべての辺の最小のツリーを介してV単純な経路、例えば任意のuのために、MEXの最大値は、(U、V)vができるだけ小さいようです。

再びMEXの定義をそれを説明します:

これは、ツリー内の指定されたサンプルの対象です。

我々はMEX(4,6)を要求したとします。

4-> 6を得るための簡単なパス:

図から分かるように、三方2,4を通る経路は、残りのツリーは、最小値は0であり、0であることMEX(4,6)0,3エッジ。

MEX(4,3)= 1、MEX(3,6)= 2、同様に利用できます。

ソリューション

明らかに、単純なパスで別の地点からツリーのいずれかが同じ点に接続された任意の三辺を通過しないと同等、二回同じ点を通過しません。

これは、最小のツリー回答で構成することができる:3点以上を探し、0,1,2に割り当てられた点の3辺のいずれかに接続されるように、エッジによって接続されています。

0,1,2三辺は、単純なパス上に存在することはできませんので、その答えは2です。そして、任意の木の両側には、答えが2より大きくすることはできませんのでことを、簡単なパス上に存在することができるので。

見つけることができ、この構造が最適です。

コード

状況に特別な注意がチェーンとして木を宣告しました。

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
CONST  INT N = 1E5 + 5 整数 N、M、選んだ、ANS [N]、ティム、CNT = 3 、訪問[N]。
ベクター < INT > G [N]。 < INTINT > P [N]。
int型のmain(){ 
    scanf関数(" %のD "、&n)を。
    以下のためにINT iが= 1 ; I <N; I ++ ){
         int型、U、V。
        scanf関数(" %D%D"、&​​U&V); 
        G [U] .push_back(V); 
        G [V] .push_back(U); 
        P [i]が1次回 = U; 
        P [i]は.second = V; 
    } 
    ためINT iは= 1 ; I <= N; I ++ 場合(G [i]が.size()> = 3 ){ 
            を選択した = I;
             ブレーク; 
        } 
    場合(==選択した0 ){
         ためINT iは= 1。 I <N; I ++ 
            のprintf("%D \ n "、I - 1 );
         戻り 0 ; 
    } 
    ためINT iが= 1 ; iが<N; I ++ 場合(P [i]が1次回== || P [i]は.second =を選びました= 選択した){ 
            ANS [I] = ティム; 
            ティム ++ ; 
            訪問[I] = 1 ;
             場合(TIM> 2 休憩; 
        } 
    ためINT iは= 1 ; I <N; I ++ もし(!訪問は[i])と
            ANS [i]は = CNT ++ ;
    以下のためにINT iが= 1 ; I <N I ++ 
        のprintf(" %D \ n " 、ANS [I])。
    リターン 0 ; 
}

問題のD.

問題の意味

短い長さNのすべての要素のアレイと所定値V、および排他的OR所定の値uのためのすべての要素のそのようなアレイとして構成される。

ソリューション

建設法外に3つの質問**

最初のステップは、V解けるかどうか、Uを決定することです。

XORのいくつかの数とそれらの合計よりも確かに大きくないが、それは以下のV、U以上であってはなりません。

第二に、排他的OR 1であり、ビット場合、アレイは、1ビットの必須の数は奇数であり、ビットが1であるべきです。同様に、排他的論理和ビットと0であり、ビットはゼロでなければなりません。

したがって、場合にのみ、Vは> = uおよび(Vuが)| 2は、ケース、U、Vの可解です。

我々は文特許N <3例を考えるだけでよいので、明らかに、ケース可解U、V、で{U(VU)/ 2、(VU)/ 2}、常に解決可能な構成です。

N = 0:Uの場合に解けるは、V = = 0。

N = 1:Uの場合には解けるが、V =。

N = 2:{/ 2( U + V)/ 2、(VU)} を満たす場合に設立された状態。(具体的な理由のない書き込みには、内の別のブログを書きます)

コード

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
長い N、M。
int型のmain(){ 
    scanf関数を(" %LLD%LLD "、&​​N、&M)。
    もし(N> M ||(M - N)%2!= 0 ){ 
        プット(" -1 " )。
        リターン 0 ; 
    } そう であれば(N == M && N == 0 ){ 
        プット(" 0 " )。
    } そう であれば(N ==  M){
        のprintf( " 1 \ N%LLD " 、N)
    } {
         長い  X =(N + M)/ 2、Y = N。
        長い 長い = X、B = X - Y。
        もし((+ b)は== M &&(^ B)== N)
            のprintf(" 2 \ N%LLD%LLD " 、B)。
        
            のprintf(" 3 \ N%LLD%LLD%LLD "、N、(M - N)/ 2、(M - N)/ 2 )。
        リターン 0 ; 
    } 
    リターン 0 
}

トレーニングの改訂タイトル部分が完了した後E、F、3月に更新されます。

おすすめ

転載: www.cnblogs.com/HarryHuang2004/p/12498635.html