delete pics to save space
This commit is contained in:
65
2.11732.cpp
Normal file
65
2.11732.cpp
Normal file
@ -0,0 +1,65 @@
|
||||
#include<cstdio>
|
||||
#include<cstring>
|
||||
#include<algorithm>
|
||||
using namespace std;
|
||||
typedef long long LL;
|
||||
int son[4000010],bro[4000010],l[4010],n,sz;
|
||||
LL size[4000010];
|
||||
char ch[4000010],s[4010][1010];
|
||||
void init()
|
||||
{
|
||||
int i;
|
||||
for(i=1;i<=n;i++)
|
||||
{
|
||||
scanf("%s",s[i]+1);
|
||||
l[i]=strlen(s[i]+1);
|
||||
}
|
||||
memset(son,0,sizeof(son));
|
||||
memset(bro,0,sizeof(bro));
|
||||
sz=0;
|
||||
}
|
||||
LL solve()
|
||||
{
|
||||
init();
|
||||
int i,j,k,p,tmp;
|
||||
bool flag;
|
||||
LL res=0,last;
|
||||
for(i=1;i<=n;i++)
|
||||
{
|
||||
p=0;
|
||||
last=i-1;
|
||||
for(j=1;j<=l[i]+1;j++)
|
||||
{
|
||||
flag=0;
|
||||
for(k=son[p];k;tmp=k,k=bro[k])
|
||||
if(ch[k]==s[i][j])
|
||||
{
|
||||
flag=1;
|
||||
break;
|
||||
}
|
||||
if(flag) p=k;
|
||||
else
|
||||
{
|
||||
if(!son[p]) son[p]=++sz;
|
||||
else bro[tmp]=++sz;
|
||||
p=sz;
|
||||
ch[p]=s[i][j];
|
||||
size[p]=0;
|
||||
}
|
||||
res+=size[p]+last;
|
||||
last=size[p];
|
||||
size[p]++;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
#ifdef local
|
||||
freopen("pro.in","r",stdin);
|
||||
#endif
|
||||
int K=0;
|
||||
while(scanf("%d",&n)==1&&n)
|
||||
printf("Case %d: %lld\n",++K,solve());
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user