Cod sursa(job #1849996)

Utilizator andreiulianAndrei andreiulian Data 18 ianuarie 2017 00:42:19
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream> 
#include <fstream>
#include <cmath>
//#include <vector>
//#include <set>
#include <algorithm>
#include <unordered_map>
#include <cstring>
//#include <string>
//#include <queue>

#define mp make_pair
#define pb push_back
#define ff(i, x, n) for (int i = x; i <= n; ++i)
#define dd cout << 
#define nn << '\n'
#define ss << ' ' <<

using namespace std;
char t[10000005], c[25];
unordered_map <long long, bool> m;
int main(){
		//freopen("schi.in", "r", stdin);
		//freopen("schi.out", "w", stdout);
		ifstream in("abc2.in");
		ofstream out("abc2.out");
	in >> t;
	int lt = strlen(t), lc = 0, r = 0, i;
	long long nr;
	ff(i, 0, lt - 1) {
		t[i] -= 'a';
	}
	while (in >> c) {
		nr = 0;
		lc = (lc != 0)? (lc) : (strlen(c));
		ff(i, 0, lc - 1) {
			nr = nr * 3 + c[i] - 'a';
		}
		m[nr] = 1;
	}
	nr = 0;
	long long pp = pow(3, lc - 1);
	for (i = 0; i < lc; ++i) {
		nr = nr * 3 + t[i];
	}
	if (m[nr]) {
		++r;
	}
	for (; i < lt; ++i) {
		nr -= pp * t[i - lc];
		nr *= 3;
		nr += t[i];
		if (m[nr]) {
			++r;
		}
	}
	cout << r << '\n';
}