接尾辞配列Hunziブラシタイトルレコード


羅区P3809 [テンプレート]接尾辞ソート

  • まず(*≧▽≦)O TSUほとんど水テンプレートのタイトルの一つに┏━┓
  • SA [数Nmax]   SA [i]はiは番号で添字の数としてランキング
  • X- [数Nmax]     X- [i]の値は、値が、各サイクルが再び更新ランキングに基づくべきです
  • Y [の数Nmax]     Y [I]を2回使用して中間体アレイと、第SA [i]のため[I](最初のキー、第2の更新X iの数をランク付けする第二のキーワードの位置に応じて更新されますオリジナル値x [i]は、第1のY [i]を有することが、最後のy [I]を更新するためには、xに割り当てられている場合の比較を用いる[i])と
  • キーワードから毎秒公知のqsort()関数は、(X [i]が)SAで基数ソートの結果を使用して、ランク番号を見つける(Y [i])とし、最初のキー値をランク付けする[I]内部
  • 各サイクルの状態の後:X [i]は、SA [i]が決定されています
  • 最も外側のループL:このサイクルSA後LのSAに対応する電流[i]は、[i]は長さを指すが2リットルになります
  • そうL <N(又は<= N / 2) 
  • 悪いどちらかの接尾辞配列を書いて大きな困難を持ちます。コードが間違っているいくつかの簡単なポイント
  • コード:
    1つの#include <ビット/ STDC ++ H.>
     2  の#define 1000010の数Nmax
     3。 
    4。 使用した 名前空間STD;
     5  int型C、RK [Nmax個の]、X Y [の数Nmax]、[数Nmaxの】SA、[Nmax個の] [の数Nmax];
     6  / / Y最初のキーワードの位置のI [i]が第二キーワード順位番号
    7。 
    8。 チャーS [の数Nmax];
     9  int型 N-、K、M = 200である;
     10  
    。11  ボイドのqsort(){
     12である     ためint型 I = 1 ; I <= M、Iが++)C [I] = 0 ;
     13である     ためINT I = 1; I <= N。I ++)C [X [I]] ++ ;
    14      のためにint型 I = 1 [I] + = C C [I-; I <= M I ++)は1 ]。
    15      のためにint型 ; I> = I = N 1 = - SA [C [X [Y [I]]]]; i--); Y [i]は
    16  }
     17  
    18  INT メイン(){
     19      のscanf(" %sの"、S + 1 )。
    20      N =のSTRLEN(S + 1 )。
    21      のためにint型 i = 1 ; iが<= N; iが++)X [i]は=のS [i]は、
    22      のためにINT I = 1。 ;私は<= N-; I ++の)Y [I] = I;
     23である     のqsort();
     24      用のint型 L = 1。 ; L <N - ; L << = 1 ){ 
     25          INT T = 0 26であります         以下のためにint型 I = N-L- + 。1 ; I <= N; I ++)はY [T ++] = I; 
     27の         // いくつかの数字が最初のキーではなく、第2のキーは、いくつかの数字のsaされていない[I ]の範囲カバーすることができる
    28          のためにINT I = 1 ; I <= N; I ++)はIF(SA [I]> L)Y [T ++] = SA [I] -1;   // 最初に存在する場合キーワード
    29          のqsort();
     30         M = 1 ;
     31である          Y [SAの[ 1 ] =のM;
     32          用のint型 I = 2 ; I <= N; Iは++ ){
     33は、             // ここfallibility、SA [i]を2リットルの長さを指し、しかしXのみLの長さを意味するので、また第二のキーワードの比較
    34である             IF(X [SA [I]] == X [SA [I- 1 ]])IF(X [SA [I] + L] = X = [SA [I- 1 ] + L]){Y [SA [I] = mの; 続行;}
     35              Y [SA [I] ++ = M;
     36          }
     37          のためのint型私は= 1 ; I <= N; I ++)X [I] = Yは、[I]は、
     38であります     }
     39      のためのint型 i = 1 ; iが<= N; iが++)のprintf(" %dの" 、SA [I])。
    40      リターン 0 ;
    41 }
    (<ゝω・)☆

     

おすすめ

転載: www.cnblogs.com/jiecaoer/p/11609119.html