Cod sursa(job #2288608)

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

using namespace std;

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

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

bool find(int x, pair <int, int> y) {
	for (auto i : v[x])
		if (i == y)
			return 1;
	return 0;
}

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].push_back({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 (find(mask1, {mask2, mask3})) {
				rs++;
				break;
			}
		}
	}
	out << rs;
	return 0;
}