Cod sursa(job #352478)

Utilizator capmIonut Vasilescu capm Data 2 octombrie 2009 00:05:51
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>
#include <string>
#include <iostream>

using namespace std;

int phi[2000001];

int main()
{
	freopen("strmatch.in", "r", stdin);
	freopen("strmatch.out", "w", stdout);
	string a, b;
	int lena, lenb, i, k, cnt = 0;
	cin >> a;
	lena = a.length();
	cin >> b;
	lenb = b.length();

	k = -1;
	phi[0] = -1;
	for(i = 1; i < lena; ++i)
	{
		while(k != -1 && a[k + 1] != a[i])
		{
			k = phi[k];
		}
		if(a[k + 1] == a[i])
		{
			++k;
		}


		phi[i] = k;
	}

	k = -1;
	for(i = 0; i < lenb; ++i)
	{
		while(k != -1 && a[k + 1] != b[i])
		{
			k = phi[k];
		}
		if(a[k + 1] == b[i])
		{
			++k;
		}
		if(k == lena - 1 && cnt < 1000)
		{
			++cnt;
			printf("%d ", i - lena + 1);
			k = phi[k];
		}
	}




	return 0;
}