POJ 2334 Simple prefix compression
問題
n個の文字列A[0],A[1],...,A[n-1]が与えられる。
接頭辞圧縮とは、次のような圧縮を言う。
A[i]とA[i+1]に対して、j<min(len(A[i]),len(A[i+1])かつ
次が成り立つ最大のjについて、
A[i][0]=A[i+1][0], A[i][1]=A[i+1][1], ..., A[i][j]=A[i+1][j-1]
A[i+1]を[j]A[i+1][j]A[i+1][j+2]...と表す。
ここで[j]は、jのサイズを表す1文字の文字である。
j=0の場合、文字列は圧縮されず1文字文長くなることになる。
n個の文字列に対してこの圧縮をしたとき、何文字なるか求めよ。
制約条件
N≦10000
A[i]の長さ≦255
方針
共通接頭辞はただ単にループをまわしてどこまで一致するか見ればよい。
(一致した長さ-1)が圧縮で短くなる。
ソースコード
int N; char in[10000][256]; int main() { scanf("%d",&N); int ans=0; rep(i,N){ scanf("%s",in[i]); int l=strlen(in[i]); ans+=l; if(i){ int j=0; for(;j<l&&in[i-1][j]==in[i][j];j++); ans-=j-1; } } printf("%d\n",ans); return 0; }