Pagini recente » Cod sursa (job #1171131) | Cod sursa (job #299768) | Cod sursa (job #412058) | Cod sursa (job #1856003) | Cod sursa (job #2201762)
#include <stdio.h>
#include <list>
#include <cstring>
using namespace std;
char A[2000005],B[2000005];int v[1005];
list<int> l; list<int>::iterator it;
int main()
{
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
fgets(A, sizeof(A), stdin);
fgets(B, sizeof(B), stdin);
int M, N, i;
N = strlen(B); B[N] = '\0'; N--;
M = strlen(A); A[M] = '\0'; M--;
for(i = 0; i < N; i++)
{
for(it = l.begin(); it != l.end();)
{
if(*it == M)
{v[0]++;v[min(v[0],1001)] = i - M; it = l.erase(it); continue;}
if(B[i] == A[*it])
(*it)++,it++;
else it = l.erase(it);
}
if(B[i] == A[0])
l.push_back(1);
}
for(it = l.begin(); it != l.end(); it++)
if(*it == M)v[0]++,
v[min(v[0],1001)] = i - M;
printf("%d\n", v[0]);
for (i = 1; i <= min(v[0],1000); ++i)
printf("%d ", v[i]);
printf("\n");
return 0;
}