即時デコード可能

https://loj.ac/problem/10052

タイトル説明

  別の文字列の接頭辞であるリクエスト文字列がある場合には、いくつかの文字列を与えます。

考え

  そして、電話番号リストと全く同じ、辞書ツリーのテンプレートのタイトルが、異なる出力、あなたが注目を初期化することができ、それは詳細には触れません。

コード

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
INT CH [ 5000 ] [ 3 ]、TOT。
ブール編[ 5000 ];
無効クリア()
{ 
    memsetの(CH、0はsizeof (CH))。
    memset(編、0はsizeof (ED))。
    TOT = 1 
} 
BOOL(挿入のchar *のS)
{ 
    int型、U = 1 INT LEN = STRLEN(S)。
    ブール F = 0;
    以下のためにint型 i = 0 ; iがLEN <; iは++ 
    { 
        int型 NUM = S [I] - ' 0 ' もし(!をch [U] [NUM])CH [U] [NUM] = ++ TOT;
        それ以外の 場合(I == len- 1)は、f = 1 ; 
        U = CH [U] [NUM]。
        もし(ED [U])F = 1 
    } 
    ED [U] = 1 リターンF; 
} 
int型のmain()
{ 
    int型 CAS = 0 CHARS [ 20 ]。
    一方、(〜のscanf(" %sの" 、S))
    { 
        BOOLの F = 0 
        クリア(); 
        もし(インサート(S))は、f = 1 一方、(scanf関数(" %S " 、S))
        { 
            場合(STRLEN(S)== 1つの && S [ 0 ] == ' 9 'ブレークもし(インサート(S))は、f = 1 
        } 
        場合(のprintf(F!)を設定%dはすぐに復号可能なの\ nは"++ CAS)が、
         それ以外(のprintf " を設定%dはすぐにデコード可能な\ nのではない"、++ ; CAS)
    } 
    の戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/fangbozhen/p/11628494.html