#include "dna.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<vector<ll>> prefix_a {}, prefix_b {};
string s, t;
void init(std::string a, std::string b) {
s = a;
t = b;
prefix_a.resize(a.size() + 1, {0, 0, 0});
prefix_b.resize(b.size() + 1, {0, 0, 0});
for (ll i = 1; i <= a.size(); i++) {
switch (a[i-1])
{
case 'A':
prefix_a[i][0]++;
break;
case 'C':
prefix_a[i][1]++;
break;
default:
prefix_a[i][2]++;
break;
}
switch (b[i - 1])
{
case 'A':
prefix_b[i][0]++;
break;
case 'C':
prefix_b[i][1]++;
break;
default:
prefix_b[i][2]++;
break;
}
}
for (ll i = 1; i <= a.size(); i++) {
prefix_a[i][0] += prefix_a[i-1][0];
prefix_a[i][1] += prefix_a[i-1][1];
prefix_a[i][2] += prefix_a[i-1][2];
prefix_b[i][0] += prefix_b[i-1][0];
prefix_b[i][1] += prefix_b[i-1][1];
prefix_b[i][2] += prefix_b[i-1][2];
}
}
int get_distance(int x, int y) {
string a = s, b = t;
if (y - x <= 2) {
if (
(prefix_a[y+1][0] - prefix_a[x][0] != prefix_b[y+1][0] - prefix_b[x][0]) ||
(prefix_a[y+1][1] - prefix_a[x][1] != prefix_b[y+1][1] - prefix_b[x][1]) ||
(prefix_a[y+1][2] - prefix_a[x][2] != prefix_b[y+1][2] - prefix_b[x][2])
) return -1;
if (x == y) return 0;
else if (y == x + 1){
return (s.substr(x, 2)!=t.substr(x, 2));
} else {
if (s.substr(x, 3) == t.substr(x, 3)) return 0;
else if (a[x] == b[x] || a[x + 1] == b[x+1] || a[y] == b[y]) return 1;
else return 2;
}
}
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... |