Pagini recente » Rating Jinga Robert (dingbat) | Rating Nedelcu Ioana-Teodora (twig) | Rezultatele filtrării | Rezultatele filtrării | Cod sursa (job #2451856)
#include <fstream>
#include <iostream>
#include <string.h>
using namespace std;
ifstream fin{"strmatch.in"};
ofstream fout{"strmatch.out"};
size_t sol[1001];
size_t k{0};
char A[2000002];
char B[2000002];
size_t prefix[2000002];
int main()
{
fin.getline(A, 2000002, '\n');
fin.getline(B, 2000002, '\n');
cout<<B;
for(size_t j = 0, i = 1; i < strlen(A);)
{
if(*(A + i) == *(A + j))
{
prefix[i] = j + 1;
++i;
++j;
}
else if(j != 0) j = prefix[j - 1];
else prefix[i++] = 0;
}
for(size_t j = 0, i = 0; i < strlen(B);)
{
if(*(A + j) == *(B + i))
{
++i;
++j;
} else if(j != 0) j = prefix[j - 1];
else ++i;
if(j == strlen(A)) sol[++k] = i - j;
if(k == 1000) break;
}
fout << k << "\n";
for(size_t i = 1; i <= k; ++i) fout << sol[i] << " ";
}