luoguP4341 [BJWC2010]エイリアンの接触

暴力のアイデア:

トライに挿入暴力、出力端の辞書式順序をサブストリング列挙値が1よりも大きいです

時間の複雑さ:N- 3。

結果:TLE 0ポイント

非常に厄介な少し左


サフィックスだけ、統計の合計の出力値を列挙することができ、観察後:アイデアの正ソリューション

コード

`` `CPP

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

名前空間stdを使用。

const int型MAXN = 1E7;

int型nは、CNT;

文字列SS。

構造体ノード{

 int型の合計値、終了、息子[2]。

} [MAXN]ソート。

空のインサート(文字列s)

{

 int型は今= 0、X;

 以下のために(INT i = 0; i)は(s.lengthを<; iは++します){

  X =トライ[今] .son [S [I] - '0']。

  もし(x == 0){

   X =トライ[今] .son [S [I] - '0'] = ++ CNT。

  }

  トライ[X] .SUM ++。

  今= xと;

 }

}

 

空のビルド()

{

 以下のために(INT i = 0; iがn <; iは++){

   挿入(ss.substr(I、NI));

 }

}

 

空のクエリ(今INT)

{

 IF(トライ[今] .SUM> 1){

  coutの<<トライ[今] .SUM <<てendl;

 }

 IF(トライ[今] .son [0]){

  クエリ(トライ[今] .son [0])。

 }

 IF(トライ[今] .son [1]){

  クエリ(トライ[今] .son [1])。

 }

}

 

メインint型()

{

// freopenは(STDIN、 "R"、 "です。");

// freopenは(、 "W"、stdoutを "アウト。");

 CIN >> N >> SS。

 ビルド();

 クエリ(0);

 0を返します。

}

`` `

これは、正の解SAを聞いています

しかし、私は、あまりにも弱い死ぬことはありません

 

おすすめ

転載: www.cnblogs.com/zhu-chen/p/11487329.html