#include "dna.h"
#include <bits/stdc++.h>
#define maxn 100005
using namespace std;
int n;
int sa[maxn], st[maxn], sc[maxn];
int ta[maxn], tt[maxn], tc[maxn];
int s[maxn][6];
void init(string a, string b) {
n = a.size();
a = "0" + a; b = "0" + b;
for (int i = 1; i <= n; i++) {
sa[i] = sa[i-1] + (a[i] == 'A'); ta[i] = ta[i-1] + (b[i] == 'A');
st[i] = st[i-1] + (a[i] == 'T'); tt[i] = tt[i-1] + (b[i] == 'T');
sc[i] = sc[i-1] + (a[i] == 'C'); tc[i] = tc[i-1] + (b[i] == 'C');
}
for (int i = 1; i <= n; i++) {
s[i][0] = s[i-1][0];
if (a[i] == 'A' && b[i] == 'C') ++s[i][0];
}
for (int i = 1; i <= n; i++) {
s[i][1] = s[i-1][1];
if (a[i] == 'T' && b[i] == 'A') ++s[i][1];
}
for (int i = 1; i <= n; i++) {
s[i][2] = s[i-1][2];
if (a[i] == 'C' && b[i] == 'T') ++s[i][2];
}
for (int i = 1; i <= n; i++) {
s[i][3] = s[i-1][3];
if (a[i] == 'C' && b[i] == 'A') ++s[i][3];
}
for (int i = 1; i <= n; i++) {
s[i][4] = s[i-1][4];
if (a[i] == 'A' && b[i] == 'T') ++s[i][4];
}
for (int i = 1; i <= n; i++) {
s[i][5] = s[i-1][5];
if (a[i] == 'T' && b[i] == 'C') ++s[i][5];
}
}
//A-C 0 | C-A 3
//T-A 1 | A-T 4
//C-T 2 | T-C 5
int get_distance(int x, int y) {
++x; ++y;
if (sa[y]-sa[x-1] != ta[y]-ta[x-1]) return -1;
if (st[y]-st[x-1] != tt[y]-tt[x-1]) return -1;
if (sc[y]-sc[x-1] != tc[y]-tc[x-1]) return -1;
int AC = s[y][0]-s[x-1][0], CA = s[y][3]-s[x-1][3];
int TA = s[y][1]-s[x-1][1], AT = s[y][4]-s[x-1][4];
int CT = s[y][2]-s[x-1][2], TC = s[y][5]-s[x-1][5];
if (AC == CA) {
assert(TA == AT && CT == TC);
return AC + TA + CT;
}
if (AC > CA) {
int p = AC-CA;
assert(TA-AT == p && CT-TC == p);
return CA + AT + TC + 2 * p;
}
if (AC < CA) {
int p = CA-AC;
assert(AT-TA == p && TC-CT == p);
return AC + TA + CT + 2 * p;
}
return 0;
}
/*
6 1
ATACAT
ACTATA
/*
6 1
ATACAT
ACTATA
1 3
*/
# | 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... |