#include <bits/stdc++.h>
#include "dna.h"
using namespace std;
const int MAXN=1e5+5;
int pref[MAXN][27][2];
int cnt[MAXN][3][3];
void init(std::string a, std::string b) {
for(int i=0;i<a.size();i++){
int x=0,y=0;
if(a[i]=='C')x=1;
if(a[i]=='T')x=2;
if(b[i]=='C')y=1;
if(b[i]=='T')y=2;
cnt[i][x][y]++;
pref[i][a[i]-'A'][0]++;
pref[i][b[i]-'A'][1]++;
if(i>0){
for(int j=0;j<3;j++){
for(int k=0;k<3;k++){
cnt[i][j][k]+=cnt[i-1][j][k];
}
}
for(int j=0;j<26;j++){
pref[i][j][0]+=pref[i-1][j][0];
pref[i][j][1]+=pref[i-1][j][1];
}
}
}
}
int get_distance(int x, int y) {
for(int j=0;j<26;j++){
if(pref[y][j][0]-(x>0?pref[x-1][j][0]:0)!=pref[y][j][1]-(x>0?pref[x-1][j][1]:0))return -1;
}
int ans=0;
bool flag=0;
for(int i=0;i<3;i++){
for(int j=i+1;j<3;j++){
int sc1=cnt[y][i][j]-(x>0?cnt[x-1][i][j]:0);
int sc2=cnt[y][j][i]-(x>0?cnt[x-1][j][i]:0);
ans+=min(sc1,sc2);
if(sc1>sc2 && !flag){
ans+=2*(sc1-sc2);
flag=1;
}
}
}
return ans;
}
/*
* act cat
* cta
*/
# | 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... |