Submission #1166295

#TimeUsernameProblemLanguageResultExecution timeMemory
1166295tamyteCards (LMIO19_korteles)C++17
19 / 100
138 ms2212 KiB
#include <bits/stdc++.h>



using namespace std;
using ll = long long;
int cnt4[26][26][26][26];
int cnt2[4][26][26];

int main() {
	int N;
	cin >> N;
	ll res = 0;
	for (int i = 0; i < N; ++i) {
		string s, t;
		cin >> s >> t;
		vector<int> a(4);
		set<int> st;
		for (int j = 0; j < 2; ++j) {
			a[j] = (s[j] - 'A');
			a[j + 2] = (t[j] - 'A');
		}
		for (auto& u : a) {
			st.insert(u);
		}
		res += cnt2[2][a[0]][a[1]];
		res += cnt2[0][a[2]][a[3]];
		res += cnt2[1][a[1]][a[3]];
		res += cnt2[3][a[0]][a[2]];
		if (st.size() == 4) {
			res -= cnt4[a[2]][a[3]][a[0]][a[1]];
			res -= cnt4[a[1]][a[0]][a[3]][a[2]];
		} else if (st.size() == 3) {
			// AA : AA BC
			// BC : CB AA
			if (a[0] == a[1]) {
				res -= cnt4[a[0]][a[0]][a[3]][a[2]];
				res -= cnt4[a[2]][a[3]][a[0]][a[0]];
			// AB : BA AC 
			// AC : CA AB
			} else if (a[0] == a[2]) {
				// cout << res << endl;
				res -= cnt4[a[1]][a[0]][a[3]][a[0]];
				res -= cnt4[a[0]][a[3]][a[0]][a[1]];
				// cout << res << endl << endl;
			// BC : AA CB
			// AA : BC AA
			} else if (a[2] == a[3]) {
				res -= cnt4[a[2]][a[2]][a[0]][a[1]];
				res -= cnt4[a[1]][a[2]][a[2]][a[2]];
			// BA : AB CA
			// CA : AC BA
			} else if (a[1] == a[3]) {
				res -= cnt4[a[1]][a[0]][a[1]][a[2]];
				res -= cnt4[a[2]][a[1]][a[0]][a[1]];
			// AB : B_  CA
			// CA : AB  _C
			} else if (a[0] == a[3]) {
				for (int j = 0; j < 26; ++j) {
					res -= cnt4[a[1]][j][a[0]][a[1]];
					res -= cnt4[a[2]][a[0]][j][a[2]];
				}
			// BA : _B AC 
			// AC : BA C_
			} else if (a[1] == a[2]) {
				for (int j = 0; j < 26; ++j) {
					res -= cnt4[j][a[0]][a[0]][a[1]];
					res -= cnt4[a[1]][a[3]][a[3]][j];
				}
			} else {
				assert(false);
			}
		} else if (st.size() == 2) {
			if ((a[0] == a[1] && a[2] == a[3])
			|| (a[0] == a[2] && a[1] == a[3])) {
				res -= cnt4[a[0]][a[1]][a[2]][a[3]];
				if (a[0] == a[1]) {
					res -= cnt4[a[2]][a[3]][a[0]][a[1]];
				} else {
					res -= cnt4[a[1]][a[0]][a[3]][a[2]];
				}
			} else if (a[0] == a[3]) {
				res += cnt4[a[1]][a[0]][a[3]][a[2]];
				// AB : BA B_ BA BA _A
				// BA : AB AB A_ _B AB
				for (int j = 0; j < 26; ++j) {
					res -= cnt4[a[1]][j][a[0]][a[1]];
					res -= cnt4[a[1]][a[0]][a[0]][j];
					res -= cnt4[a[1]][a[0]][j][a[1]];
					res -= cnt4[j][a[0]][a[0]][a[1]];
				}
			} else {
				// AA : _A AA
				// AB : AA BA
				if (a[0] == a[1] && a[0] == a[2]) {
					for (int j = 0; j < 26; ++j) {
						res -= cnt4[j][a[0]][a[0]][a[0]];
					}
					res -= cnt4[a[0]][a[0]][a[1]][a[0]];
				// AB : AA BA
				// AA : _A AA
				} else if (a[0] == a[2] && a[2] == a[3]) {
					for (int j = 0; j < 26; ++j) {
						res -= cnt4[a[0]][a[0]][j][a[0]];
					}
					res -= cnt4[a[2]][a[0]][a[0]][a[0]];
 				// BA : AB AA
				// AA : AA A_
				} else if (a[1] == a[2] && a[2] == a[3]) {
					res -= cnt4[a[1]][a[0]][a[1]][a[1]];
					for (int j = 0; j < 26; ++j) {
						res -= cnt4[a[1]][a[1]][a[1]][j];
					}
				// AA : AA A_
				// BA : AB AA
				} else if (a[0] == a[1] && a[0] == a[3]) {
					res -= cnt4[a[0]][a[0]][a[0]][a[2]];
					for (int j = 0; j < 26; ++j) {
						res -= cnt4[a[0]][j][a[0]][a[0]];
					}
				} else {
					// assert(false);
				}
			}
		} else if (st.size() == 1) {
			res += cnt4[a[0]][a[1]][a[2]][a[3]];
			for (int j = 0; j < 26; ++j) {
				res -= cnt4[a[0]][a[0]][a[0]][j];
				res -= cnt4[j][a[0]][a[0]][a[0]];
				res -= cnt4[a[0]][j][a[0]][a[0]];
				res -= cnt4[a[0]][a[0]][j][a[0]];
			}
		} else {
			// assert(false);
		}
		// cout << res << endl;
		cnt2[0][a[0]][a[1]]++;
		cnt2[1][a[0]][a[2]]++;
		cnt2[2][a[2]][a[3]]++;
		cnt2[3][a[1]][a[3]]++;
		cnt4[a[0]][a[1]][a[2]][a[3]]++;
	}
	cout << res << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...