Cod sursa(job #2488279)

Utilizator FlorianMarcuMarcu Florian Cristian FlorianMarcu Data 6 noiembrie 2019 17:33:18
Problema Potrivirea sirurilor Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
// PotrivireaSirurilor.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"
#include <fstream>
#include <string>
#include <iostream>
#include <algorithm>

std::ifstream fin("strmatch.in");
std::ofstream fout("strmatch.out");

int main()
{
	std::string A = "", B = "";
	int* v = new int[100000];
	int hash = 0;
	int sum = 0;
	int app = 0;
	fin >> A >> B;
	int64_t m = A.length(), n = B.length();
	std::printf("m=%I64d, n=%I64d\n", m, n);
	if (m <= n) {
		for (int i = 0; i < m; i++)
		{
			hash += int(A[i]);
			sum += int(B[i]);
		}

		for (int i = m - 1; i < n; i++) {
			if (i >= m)
				sum += int(B[i]);
			//if(i % 10000 == 0)
			//std::cout << "i=" << i << '\n';
			if (sum == hash)
				if (B.substr(i - m + 1, m) == A)
					v[app++] = i - m + 1;
			sum -= int(B[i - m + 1]);
		}
		std::cout << "gata";
	}
	fout << app << std::endl;
	if (app != 0 && m <= n) {
		for (int i = 0; i < std::min(app, 1000); i++)
			fout << v[i] << " ";
	}
	else fout << 0;

}