Cod sursa(job #2291392)

Utilizator flibiaVisanu Cristian flibia Data 27 noiembrie 2018 22:23:17
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>
#define ll long long
#define mod 64937

using namespace std;

ifstream in("abc2.in");
ofstream out("abc2.out");

string s, g;
int sz, dim, rs;
int a, b, c;
vector <ll> v[mod + 123];

int main() {
	in >> s;
	while (in >> g) {
		dim = g.size();
		a = b = c = 0;
		for (int i = 0; i < dim; i++) 
			switch (g[i]) {
				case 'a' : a |= (1 << i); break;
				case 'b' : b |= (1 << i); break;
				case 'c' : c |= (1 << i); break;
			}
		bool f = 0;
		for (auto i : v[((a << 40LL) | (b << 20LL) | c) % mod])
			if (i == ((a << 40LL) | (b << 20LL) | c)) {
				f = 1;
				break;
			}
		if (!f)
			v[((a << 40LL) | (b << 20LL) | c) % mod].push_back((a << 40LL) | (b << 20LL) | c);
	}
	sz = s.size();
	a = b = c = 0;
	for (int i = 0; i < sz; i++) {
		if (i >= dim) {
			a >>= 1LL;
			b >>= 1LL;
			c >>= 1LL;
		}
		switch (s[i]) {
			case 'a' : a |= (1 << min(i, dim - 1)); break;
			case 'b' : b |= (1 << min(i, dim - 1)); break;
			case 'c' : c |= (1 << min(i, dim - 1)); break;
		}
		for (auto i : v[((a << 40LL) | (b << 20LL) | c) % mod])
			if (i == ((a << 40LL) | (b << 20LL) | c)) {
				rs++;
				break;
			}
	}
	out << rs;
	return 0;
}