Cod sursa(job #2288612)

Utilizator flibiaVisanu Cristian flibia Data 23 noiembrie 2018 18:04:48
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#pragma GCC optmize("03")
#include <bits/stdc++.h>

using namespace std;

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

string s, g;
vector <unordered_set> v[1 << 20]; 

bool get(int x, pair <int, int> y) {
	return v[x].find(y) != v[x].end();
}

int main() {
	in >> s;
	while (in >> g) {
		int sz = g.size();
		int mask1 = 0, mask2 = 0, mask3 = 0;
		for (int j = 0; j < sz; j++) 
			switch (g[j]) {
				case 'a' : 
					mask1 |= (1 << j);
					break;
				case 'b' : 
					mask2 |= (1 << j);
					break;
				case 'c' : 
					mask3 |= (1 << j);
					break;
			}
		v[mask1].insert({mask2, mask3});
	}
	int sz = s.size(), rs = 0;
	for (int i = 0; i < sz; i++) {
		int mask1 = 0, mask2 = 0, mask3 = 0;
		for (int j = i; j < min(sz, i + 20); j++) {
			switch (s[j]) {
				case 'a' : 
					mask1 |= (1 << (j - i));
					break;
				case 'b' : 
					mask2 |= (1 << (j - i));
					break;
				case 'c' : 
					mask3 |= (1 << (j - i));
					break;
			}
			if (get(mask1, {mask2, mask3})) {
				rs++;
				break;
			}
		}
	}
	out << rs;
	return 0;
}