#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> p;
vector<map<char, map<char, int>>> l;
vector<map<char, int>> s, t;
void init(string a, string b) {
n = int(a.size());
p.assign(n, 0);
l.assign(n, {});
s.assign(n, {});
t.assign(n, {});
for (int i = 0; i < n; ++i) {
p[i] = a[i] != b[i];
if (i) p[i] += p[i - 1], l[i] = l[i - 1], s[i] = s[i - 1], t[i] = t[i - 1];
l[i][a[i]][b[i]]++;
s[i][a[i]]++;
t[i][b[i]]++;
}
}
int get_distance(int x, int y) {
if (s[y]['A'] - (x ? s[x - 1]['A'] : 0) != t[y]['A'] - (x ? t[x - 1]['A'] : 0) || s[y]['C'] - (x ? s[x - 1]['C'] : 0) != t[y]['C'] - (x ? t[x - 1]['C'] : 0) || s[y]['T'] - (x ? s[x - 1]['T'] : 0) != t[y]['T'] - (x ? t[x - 1]['T'] : 0)) return -1;
auto u = l[y];
if (x) for (auto &[q, w] : l[x - 1]) for (auto &[e, r] : w) u[q][e] -= r;
int ans = 0, m = y - x + 1 - u['A']['A'] - u['C']['C'] - u['T']['T'], k = min(u['A']['C'], u['C']['A']);
ans += k;
m -= k * 2;
k = min(u['A']['T'], u['T']['A']);
ans += k;
m -= k * 2;
k = min(u['C']['T'], u['T']['C']);
ans += k;
m -= k * 2;
ans += m / 3 * 2;
return ans;
}
//int main() {
// init("ATACAT", "ACTATA");
// cout << get_distance(1, 3) << '\n';
// cout << get_distance(4, 5) << '\n';
// cout << get_distance(3, 5) << '\n';
// return 0;
//}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |