Pagini recente » Cod sursa (job #2585937) | Cod sursa (job #271099) | Cod sursa (job #1136154) | Cod sursa (job #2464250) | Cod sursa (job #68969)
Cod sursa(job #68969)
#include <cstdio>
#include <string>
#include <algorithm>
#define Nmax 18
#define Lmax 30100
char s[Nmax][Lmax];
int pi[Nmax][Lmax], sz[Nmax];
int x[Nmax][Nmax];
int main()
{
freopen("adn.in","r",stdin);
freopen("adn.out","w",stdout);
int n;
scanf("%d\n",&n);
for (int i=0;i<n;++i)
{
fgets(s[i]+1,Lmax,stdin);
fputs(s[i]+1,stdout);
s[i][strlen(s[i]+1)] = 0;
//prefix :)
int k = 0;
sz[i] = strlen(s[i]+1);
pi[i][1] = 0;
printf("0 ");
for (int j=2;j<=sz[i];++j)
{
while (k > 0 && s[i][k+1] != s[i][j])
k = pi[i][k];
if (s[i][k+1] == s[i][j]) ++k;
pi[i][j] = k;
printf("%d ",pi[i][j]);
}
printf("\n");
}
printf("\n");
for (int i=0;i<n;++i)
for (int j=0;j<n;++j) if(i^j)
{
// potrivesc modelul j in sirul i... aka calc a[i][j] = inter lor ..
// -1 daca e inclus, + daca nu
int k = 0;
for (int q=1;q<=sz[i];++q)
{
while (k > 0 && s[j][k+1] != s[i][q])
k = pi[j][k];
if (s[j][k+1] == s[i][q]) ++k;
if (k == sz[j]) //inclus
{
printf("%d inclus in %d\n",j,i);
x[i][j] = -1;
break;
}
}
if(x[i][j] == 0) x[i][j] = k;
if(x[i][j] == k) printf("int %d %d = %d\n",i,j,k);
}
return 0;
}