Submission #1166287

#TimeUsernameProblemLanguageResultExecution timeMemory
1166287tamyteCards (LMIO19_korteles)C++17
19 / 100
93 ms2124 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]) { res -= cnt4[a[1]][a[0]][a[3]][a[0]]; res -= cnt4[a[0]][a[3]][a[0]][a[2]]; // 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]]; } 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...