#include "dna.h"
#include <algorithm>
using namespace std;
const int MAX = 100007;
int AC[MAX], AT[MAX], CA[MAX], CT[MAX], TA[MAX], TC[MAX];
void init(string a, string b) {
for (int i = 1; i <= a.size(); ++i) {
AC[i] = AC[i - 1] + (a[i - 1] == 'A' && b[i - 1] == 'C');
AT[i] = AT[i - 1] + (a[i - 1] == 'A' && b[i - 1] == 'T');
CA[i] = CA[i - 1] + (a[i - 1] == 'C' && b[i - 1] == 'A');
CT[i] = CT[i - 1] + (a[i - 1] == 'C' && b[i - 1] == 'T');
TA[i] = TA[i - 1] + (a[i - 1] == 'T' && b[i - 1] == 'A');
TC[i] = TC[i - 1] + (a[i - 1] == 'T' && b[i - 1] == 'C');
}
}
int get_distance(int x, int y) {
x++; y++;
int ret = 0;
int ac = AC[y] - AC[x - 1];
int at = AT[y] - AT[x - 1];
int ca = CA[y] - CA[x - 1];
int ct = CT[y] - CT[x - 1];
int ta = TA[y] - TA[x - 1];
int tc = TC[y] - TC[x - 1];
int a1 = ac + at;
int a2 = ca + ta;
int c1 = ca + ct;
int c2 = ac + tc;
int t1 = ta + tc;
int t2 = at + ct;
a1 -= min(ac, ca) + min(at, ta);
a2 -= min(ac, ca) + min(at, ta);
c1 -= min(ac, ca) + min(ct, tc);
c2 -= min(ac, ca) + min(ct, tc);
t1 -= min(at, ta) + min(ct, tc);
t2 -= min(at, ta) + min(ct, tc);
ret += min(ac, ca) + min(at, ta) + min(ct, tc);
if (a1 != a2 || c1 != c2 || t1 != t2) return -1;
else if (a1 != 0) ret += a1 * 2;
return ret;
}
# | 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... |