#include "dna.h"
#include <bits/stdc++.h>
using namespace std;
int is(char c) {
if (c=='A') return 0;
else if (c=='C') return 1;
return 2;
}
vector<vector<int>> prefa, prefb, diffa;
vector<int> diff;
void init(string a, string b) {
prefa.push_back({0, 0, 0}), prefb.push_back({0, 0, 0}), diff.push_back(0), diffa.push_back({0, 0, 0});
for (int i=0; i<(int)a.size(); i++) {
prefa.push_back(prefa.back()), prefb.push_back(prefb.back()), diff.push_back(diff.back()), diffa.push_back(diffa.back());
prefa.back()[is(a[i])]++, prefb.back()[is(b[i])]++;
if (a[i]!=b[i]) {
diff.back()++;
diffa.back()[is(a[i])]++;
}
}
}
int get_distance(int x, int y) {
int nba=diffa[y+1][0]-diffa[x][0], nbb=diffa[y+1][1]-diffa[x][1], nbc=diffa[y+1][2]-diffa[x][2];
if (prefa[y+1][0]-prefa[x][0]!=prefb[y+1][0]-prefb[x][0] || prefa[y+1][1]-prefa[x][1]!=prefb[y+1][1]-prefb[x][1] || prefa[y+1][2]-prefa[x][2]!=prefb[y+1][2]-prefb[x][2]) return -1;
return max({nba, nbb, nbc, (diff[y+1]-diff[x]+1)/2});
}
# | 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... |