Pagini recente » Cod sursa (job #347216) | Cod sursa (job #2231539) | Cod sursa (job #800405) | Cod sursa (job #98310) | Cod sursa (job #3155207)
#include <fstream>
using namespace std;
ifstream cin("strmatch.in");
ofstream cout("strmatch.out");
const int NMAX = 2e6;
string a, b;
int LPS[2 * NMAX + 2];
int Answer[1001], ind;
int secvente;
int main()
{
cin >> a >> b;
int n = (int) a.size();
int m = (int) b.size();
a = a + "#" + b;
LPS[0] = 0;
for(int i = 1; i < (int) a.size(); i++)
{
int j = LPS[i - 1];
while(j > 0 && a[j] != a[i])
j = LPS[j - 1];
if(a[j] == a[i])
j++;
LPS[i] = j;
if(LPS[i] == n)
{
secvente++;
if(ind < 1000)
Answer[++ind] = i - 2 * n;
}
}
cout << secvente << '\n';
for(int i = 1; i <= ind; i++)
cout << Answer[i] << ' ';
return 0;
}