#include "dna.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> pre_ta, pre_at, pre_ct, pre_tc, pre_ac, pre_ca;
void init(std::string a, std::string b)
{
ll n = a.size();
pre_ca.resize(n + 1, 0);
pre_ac.resize(n + 1, 0);
pre_at.resize(n + 1, 0);
pre_ta.resize(n + 1, 0);
pre_tc.resize(n + 1, 0);
pre_ct.resize(n + 1, 0);
for (ll i = 1; i <= n; i++)
{
if (a[i] == 'C' && b[i] == 'A')
pre_ca[i]++;
else if (a[i] == 'A' && b[i] == 'C')
pre_ac[i]++;
else if (a[i] == 'A' && b[i] == 'T')
pre_at[i]++;
else if (a[i] == 'T' && b[i] == 'A')
pre_ta[i]++;
else if (a[i] == 'T' && b[i] == 'C')
pre_tc[i]++;
else if (a[i] == 'C' && b[i] == 'T')
pre_ct[i]++;
}
for (ll i = 1; i <= n; i++)
{
pre_ca[i] += pre_ca[i - 1];
pre_ac[i] += pre_ac[i - 1];
pre_at[i] += pre_at[i - 1];
pre_ta[i] += pre_ta[i - 1];
pre_tc[i] += pre_tc[i - 1];
pre_ct[i] += pre_ct[i - 1];
}
}
int get_distance(int x, int y)
{
ll ca = pre_ca[y] - pre_ca[x - 1];
ll ac = pre_ac[y] - pre_ac[x - 1];
ll at = pre_at[y] - pre_at[x - 1];
ll ta = pre_ta[y] - pre_ta[x - 1];
ll tc = pre_tc[y] - pre_tc[x - 1];
ll ct = pre_ct[y] - pre_ct[x - 1];
ll AT = min(at, ta);
ll AC = min(ac, ca);
ll TC = min(tc, ct);
if (max(at, ta) - AT != max(ac, ca) - AC || max(ct, tc) - TC != max(ac,ca) - AC) return -1;
return 2 * max(at, ta) - AT + AC + TC;
}
# | 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... |