Cod sursa(job #1895172)

Utilizator virtualityBbbbbbbbbbbbbbbbbb virtuality Data 27 februarie 2017 20:27:54
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#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;
}