Pagini recente » Cod sursa (job #3216420) | Cod sursa (job #1247416) | Cod sursa (job #2534705) | Cod sursa (job #632183) | Cod sursa (job #1991550)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <stack>
#include <cstring>
using namespace std;
ifstream in("strmatch.in");
ofstream out("strmatch.out");
#define ll long long
#define pb push_back
const int inf = 1e9 + 5;
const int NMax = 2e6 + 5;
int N,M,nrSol;
char patt[NMax],str[NMax];
int pf[NMax],sol[NMax];
int main() {
in>>(patt+1);
in>>(str+1);
N = strlen(patt+1);
M = strlen(str+1);
int k;
k = 0;
for (int i=2;i <= N;++i) {
while (patt[i] != patt[k+1] && k > 0) {
k = pf[k];
}
if (patt[i] == patt[k+1]) {
++k;
}
pf[i] = k;
}
k = 0;
for (int i=1;i <= M;++i) {
while (str[i] != patt[k+1] && k > 0) {
k = pf[k];
}
if (str[i] == patt[k+1]) {
++k;
if (k == N) {
sol[++nrSol] = i-N;
k = pf[k];
}
}
}
out<<nrSol<<'\n';
nrSol = min(nrSol,1000);
for (int i=1;i <= nrSol;++i) {
out<<sol[i]<<' ';
}
in.close();out.close();
return 0;
}