Pagini recente » Cod sursa (job #3248675) | Cod sursa (job #2640460) | Cod sursa (job #2885399) | Cod sursa (job #1538229) | Cod sursa (job #1895172)
#include<bits/stdc++.h>
#define N 2000020
using namespace std;
int p[N], rs[N];
int main(){
string a, b;
int n, m;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
f>>b>>a;
n=a.length();
m=b.length();
p[0]=0;
int len=0, i=1, j;
while(i<m){
if(b[len]==b[i]){
len++;
p[i]=len;
i++;
}else{
if(len == 0){
p[i]=0;
i++;
}else{
len=p[len-1];
}
}
}
i=0;
j=0;
while(i<n){
if(a[i]==b[j]){
i++;
j++;
}
if(j==m){
g<<i-j<<' ';
j=p[j-1];
}
else if(i<n && a[i]!=b[j]){
if(j!=0){
j=p[j-1];
}else{
i++;
}
}
}
return 0;
}