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"); }