Submission #939870

#TimeUsernameProblemLanguageResultExecution timeMemory
939870vladiliusMutating DNA (IOI21_dna)C++17
71 / 100
1565 ms2396 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<pii> arr; for (auto [u, v]: cnt){ arr.push_back(u); } int out = 0; for (auto p1: arr){ pii p2 = {p1.second, p1.first}; if (cnt.find(p2) == cnt.end()){ continue; } int k1 = cnt[p1], 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<int> f; for (auto [u, v]: cnt) f.push_back(v); sort(f.begin(), f.end()); // f.back() -= f[0] while (f.size() > 1){ out += f[0]; f.back() -= f[0]; f.erase(f.begin()); if (!f.back()) f.pop_back(); sort(f.begin(), f.end()); } if (!f.empty()) out += f[0]; 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...