Submission #939868

#TimeUsernameProblemLanguageResultExecution timeMemory
939868vladiliusMutating DNA (IOI21_dna)C++17
43 / 100
1537 ms3300 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<char, char>; string a, b; vector<char> x = {'A', 'C', 'T'}; void init(string as, string bs){ a = as; b = bs; } int get_distance(int l, int r){ map<char, int> mp; for (int i = l; i <= r; i++){ mp[a[i]]++; mp[b[i]]--; } for (auto t: mp){ if (t.second != 0){ return -1; } } map<pii, int> cnt; for (int i = l; i <= r; i++){ if (a[i] == b[i]) continue; cnt[{a[i], b[i]}]++; } vector<pair<pii, int>> arr; for (auto [u, v]: cnt){ arr.push_back({u, v}); } int out = 0; for (auto [p1, k1]: arr){ pii p2 = {p1.second, p1.first}; if (cnt.find(p2) == cnt.end()){ continue; } int k2 = cnt[p2]; out += min(k1, k2); if (k1 > k2){ cnt.erase(p2); cnt[p1] -= k2; } else { cnt.erase(p1); cnt[p2] -= k1; if (!cnt[p2]){ cnt.erase(p2); } } } vector<pair<int, pii>> f; for (auto [u, v]: cnt) f.push_back({v, u}); sort(f.begin(), f.end()); // f.back() -= f[0] while (f.size() > 1){ out += f[0].first; f.back().first -= f[0].first; f.erase(f.begin()); sort(f.begin(), f.end()); } if (!f.empty()) out += f[0].first; return out; }
#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...