Pagini recente » Cod sursa (job #335076) | Cod sursa (job #1786679) | Cod sursa (job #2232047) | Cod sursa (job #193037) | Cod sursa (job #169916)
Cod sursa(job #169916)
#include <stdio.h>
#include <vector>
#include <string.h>
using namespace std;
char S[2000100], W[2000100];
long T[2000100];
long i, j, m, ns, nw, nx;
vector <long > x;
int main()
{
freopen ("strmatch.in", "rt", stdin);
freopen ("strmatch.out", "wt", stdout);
//scanf("%s\n%s", &W, &S);
fgets(W, 2000010, stdin);
fgets(S, 2000010, stdin);
/*
ns = strlen(S);
if (S[ns - 1] == '\n')
S[ns - 1] = 0, ns --;
nw = strlen(W);
if (W[nw - 1] == '\n')
W[nw - 1] = 0, nw --;
i = 2;
j = 0;
T[1] = 0;
T[0] = -1;
while (i < nw)
{
if (W[i - 1] == W[j])
T[i] = j + 1, ++i, ++j;
else
if (j > 0)
j = T[j];
else
T[i] = 0, ++i;
}
m = i = 0;
while (m + i < ns)
{
if (W[i] == S[m + i])
{
++i;
if (i == nw)
{
x.push_back(m);
++nx;
//printf("%ld ", m);
i = T[i];
++m;
}
}
else
{
m = m + i - T[i];
if (i > 0)
i = T[i];
}
}
printf("%ld\n", nx);
nx = nx < 1000 ? nx : 1000;
for (i = 0; i < nx; ++i)
printf("%ld ", x[i]);
printf("\n");*/
return 0;
}