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