Cod sursa(job #960445)

Utilizator tudorv96Tudor Varan tudorv96 Data 10 iunie 2013 15:03:58
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;

#define in "strmatch.in"
#define out "strmatch.out"
#define N 2000005

char A[N+5], B[N+5], U[N+5], n, m;
vector <int> sol;

int main () {
	ifstream fin (in);
	fin.getline (A+1, N);
	fin.getline (B+1, N);
	fin.close();
	m = strlen (A+1);
	n = strlen (B+1);
	int k = 0;
	for (int i = 2; i <= m; ++i) {
		while (k && A[k + 1] != A[i])
			k = U[k];
		if (A[k + 1] == A[i])
			k++;
		U[i] = k;
	}
	k = 0; 
	for (int i = 2; i <= n && sol.size() < 1000; ++i) {
		while (k && A[k + 1] != B[i])
			k = U[k];
		if (A[k + 1] == B[i])
			k++;
		if (k == m) {
			k = U[k];
			sol.push_back (i - m);
		}
	}
	ofstream fout (out);
	for (unsigned i = 0; i < sol.size(); ++i)
		fout << sol[i] << " ";
	fout.close();
	return 0;
}