Contest1657 - 2019年、私は強いフィールドチーム練習試合の第十四になることができます

 

Contest1657 - 2019年、私は強いフィールドチーム練習試合の第十四になることができます

サブツリーの類似性

#include <ビット/ STDC ++ H> 

名前空間STDを使用して、
typedefの符号なしlong longのULL。
typedefの長い長いLL。
const int型MAXN = 100100; 
[MAXN] HA ULL。
ベクター<整数> E [MAXN]。
unordered_map <ULL、整数> M。
ボイドDFSは{(FAをINT、UをINT)
    HA [U] = 1。
    用(オートV:E [U]){ 
        DFS(V、U)。
        HA [U] =ヘクタール[U] + HA [V] * 131。
    } 
    のM [ヘクタール[U] ++; 
} 

メインINT(){ 
    int型のn; 
    scanf関数( "%のD"、&N); 
    用(i = 1、U、V int型、iがn <; iは++){ 
        scanf関数( "%d個の%のD"、&U&V)を 
        E [U] .push_back(V)。
    } 
    DFS(1、0);
    LL ANS = 0。
    (++それ;それ= m.end()!unordered_map <ULL、整数> ::)は、(m.beginを=イテレータ){ため
        LL K = IT->第二; 
        ANS + = K×(K - 1)/ 2。
    } 
    のprintf( "%LLDする\ n"、ANS)。
    0を返します。
}

私たちは仕事をしたくありません!

#include <ビット/ STDC ++ H> 
 
名前空間STDを使用して、
const int型MAXN = 100010; 
N INT、M、NN。
構造体ノード{ 
    ストリングNA。
    int型のx、TI; 
} [MAXN]、TMP。
文字OP; 
ブールCMP(ノードA、ノードB){ 
    IF(AX == BX)a.ti> b.ti返します。それ以外の戻り斧> BX; 
} 
 
構造体CMP1 { 
    ブール演算子()(CONSTノードA、CONSTノードb)のconst { 
        IF(AX == BX)戻りa.ti <b.ti。それ以外の戻り斧<BX。
    } 
}。
 
構造体CMP2 { 
    ブール演算子()(CONSTノードA、CONSTノードb)のconst { 
        IF(AX == BX)戻りa.ti> b.ti。それ以外の戻り斧> BX; 
    } 
}。
集合<ノード、CMP1> S1。
集合<ノード、CMP2> S2。
マップの<string、ノード>融点; 
int型のmain(){ 
    IOS :: sync_with_stdio(偽); 
    cin.tie(0)。
    cout.tie(0)。
    cinを>> N; 
    以下のために(INT i = 1; iが<= N; iは++){ 
        CIN >> [I] .na >> [I] .X。
        [I] .ti = I。
        [I]を= [[I] .na];融点 
    } 
    NN = N。
    ソート(A + 1、A + N + 1、CMP)。
    INT N2 = N * 0.2。
    以下のために(; iは= N2 <; I = 1 int型私は++){ 
        s1.insert([I])。
    } 
    {ため(iは++; iがn = <iはN2 + 1 = INT)
        s2.insertを([I])。
    } 
    CIN >> M。
    以下のために(INT I = NN + 1; iは<= NN + M; I ++){
        もし(OP == ' 
        CIN>
        文字列s; 
                s1.insert(TMP)。
            cinを>>秒; 
            TMP =融点[S]。
            IF(s1.erase(TMP))n2--。
            s2.erase(TMP)。
            IF(N2>(INT)((N-1)* 0.2)){ 
                n2--。
                TMP = * s1.begin(); 
                s1.erase(TMP)。
                s2.insert(TMP)。
                coutの<< tmp.na << "今機能していません。" <<てendl; 
            } 
            N--。
            IF(N2 <(INT)(N * 0.2)){ 
                ++ N2。
                TMP = * s2.begin(); 
                s2.erase(TMP)。
                coutの<< tmp.na << "今取り組んでいます。" <<てendl;
            CIN >> [i]を.na >> [I] .X。
            [I] .ti = I。
            [I]を= [[I] .na];融点 
            IF(N2 <(INT)((N + 1)* 0.2)){ 
                TMP = * s2.begin()。
                IF(([I] .X> tmp.x)||([I] .X == tmp.x && [I] .ti> tmp.ti)){ 
                    s1.insert([I] ); 
                    COUTは<< [i]が.na << "今取り組んでいます。" <<てendl; 
                }他{  
                    s2.erase(TMP)。
                    s1.insert(TMP)。
                    s2.insert([I])。
                    COUT << [I] .na << "今動作していません。" <<てendl; 
                    coutの<< tmp.na << "今取り組んでいます。" <<てendl; 
                } 
                N2 ++。 
                    TMP = * s1.begin()。
                    (([I] .X> tmp.x)||([I] .X == tmp.x && A [i]の.ti> tmp.ti)){もし
                        s1.erase(TMP)。
                        s1.insert([I])。
                        s2.insert(TMP)。
                        COUTは<< [i]が.na << "今取り組んでいます。" <<てendl; 
                        coutの<< tmp.na << "
                        s2.insert([I])。
                        coutの<< [i]を.na << "今機能していません。" <<てendl; 
                    } 
                }他{ 
                    TMP = * s2.begin()。
                    IF((INT)(0.2 *(N + 1))> 0){NA <<「今取り組んでいます。」<<てendl; 
                        IF(([i]が.X> tmp.x)||([I] .X == tmp.x && [I ] .ti> tmp.ti)){ 
                            s1.insert([I])。
                            COUTは<< [i]が.na << "今取り組んでいます。" <<てendl; 
                        }他{ 
                            s2.erase(TMP)。
                            s1.insert(TMP)。
                            s2.insert([I])。
                            coutの<< [i]を.na << "今機能していません。" <<てendl; 
                            coutの<< tmp.na << "今取り組んでいます。" <<てendl; 
                        } 
                    }他{ 
                        s2.insert([I])。
                        coutの<< [i]を.na << "今機能していません。" <<てendl; 
        } 
    } 
    0を返します。
}

括弧

#include <ビット/ STDC ++ H> 
 
名前空間STDを使用して、
typedefの長い長いLL。
LLのn; 
メインINT()
{ 
    CIN >> N。
    int型CNT = 1; 
    0 = CHA LL。
    LL S = 0。
    (S <n)の一方
    { 
        CHA ++。
        S + = CHA。
    } 
    LL TT = SN。
    LL T = CHA-TT。
    (TT == 0)であれば
    { 
        (; iが<= CHA ++ I I = 1 INT)のため
            のprintf( ")")。
        (; I <= CHA ++ I I = 1 INT)のため
            のprintf( "("); 
    } 
    { 
        I ++)は、I <CHA(I = 0 int型のため
            )は、(i == T場合に 
                のprintf( "( )」
                のprintf( ")"); 
        (; iは<CHA iは++ iは1 = INT)のため
            のprintf( "("); 
    } 
    のprintf( "の\ n"); 
}

  

 

おすすめ

転載: www.cnblogs.com/Accpted/p/11448147.html