#include "dna.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fi first
#define se second
#define pb push_back
#define vi vector<int>
#define vl vector<ll>
#define pi pair<int, int>
#define pl pair<ll,ll>
#define all(x) (x).begin(),(x).end()
const int maxn=1e5+10;
vector<vector<vi>> pref(maxn,vector<vi>(3,vi(3,0)));
vector<vi> prefa(maxn,vi(3,0));
vector<vi> prefb(maxn,vi(3,0));
int n;
map<char,int> gt={{'A',0},{'T',1},{'C',2}};
void init(string a, string b) {
n=a.size();
for (int i=0; i<n; i++) {
pref[i+1]=pref[i];
pref[i+1][gt[a[i]]][gt[b[i]]]++;
prefa[i+1]=prefa[i];
prefa[i+1][gt[a[i]]]++;
prefb[i+1]=prefb[i];
prefb[i+1][gt[b[i]]]++;
}
}
int get_distance(int x, int y) {
for (int i=0; i<3; i++) {
if (prefa[y+1][i]-prefa[x][i]!=prefb[y+1][i]-prefb[x][i]) {
return -1;
}
}
int ans=0;
vector<vi> temp(3,vi(3,0));
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
temp[i][j]=pref[y+1][i][j]-pref[x][i][j];
}
}
for (int i=0; i<3; i++) {
for (int j=i+1; j<3; j++) {
int t=min(temp[i][j],temp[j][i]);
ans+=t;
temp[i][j]-=t;
temp[j][i]-=t;
}
}
ans+=2*temp[0][1];
ans+=2*temp[1][0];
return ans;
}
# | 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... |