Pagini recente » Cod sursa (job #186982) | Cod sursa (job #724173) | Cod sursa (job #303875) | Cod sursa (job #625387) | Cod sursa (job #1132919)
#include<iostream>
using namespace std;
void build()
{
for(i=0;i<n;++i)
{
key[i]=s[i];
sa[i]=i;
}
sort(sa,sa+n);
for(k=1;k<n;k<<=1)
{
for(i=0;i<n;++i)
if(!i||key[sa[i]]!=key[sa[i-1]])
rank[sa[i]]=i;
else
rank[sa[i]]=rank[sa[i-1]];
if(k>=n)
return;
for(i=0;i<n;++i)
if(i+k<n)
key[i]=1LL*rank[i]+rank[i+k]+1;
else
key[i]=1LL*rank[i];
sort(sa,sa+n);
}
for(i=0,k=0;i<n;++i)
{
if(k)
k--;
if(rank[i]==n-1)
{
k=0;
return ;
}
j=sa[rank[i]+1];
while(s[i+k]==s[j+k]) k++;
lcp[rank[i]]=k;
}
}
int
int main ()
{
while(1)
{
f>>s;
if(s[0]=='.')
return 0;
n=strlen(s);
build();
com=0;
for(i=sa[rank[0]+1];i;i=sa[rank[i]+1])
{
com=