# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
708961 | grossly_overconfident | Mutating DNA (IOI21_dna) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "dna.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> cq, cp, aq, ap, tq, tp, m;
void init(string p, string q) {
cq.resize(p.size() + 1);
aq.resize(p.size() + 1);
tq.resize(p.size() + 1);
cp.resize(p.size() + 1);
ap.resize(p.size() + 1);
tp.resize(p.size() + 1);
m.resize(p.size() + 1);
int cps = 0, aps = 0, tps = 0, cqs = 0, aqs = 0, tqs = 0, ms = 0;
for (int i = 1; i <= p.size(); ++i){
int j = i - 1;
if (q[j] != p[j]){
ms++;
}
if (q[j] == 'A'){
aqs++;
}
else if (q[j] == 'T'){
tqs++;
}
else{
cqs++;
}
if (p[j] == 'A'){
aps++;
}
else if (p[j] == 'T'){
tps++;
}
else{
cps++;
}
cq[i] = cqs;
aq[i] = aqs;
tq[i] = tqs;
cp[i] = cps;
ap[i] = aps;
tp[i] = tps;
m[i] = ms;
}
return;
}
int get_distance(int x, int y) {
x += 1;
y += 1;
if (cp[y] - cp[x - 1] == cq[y] - cq[x - 1] && ap[y] - ap[x - 1] == aq[y] - aq[x - 1] && tp[y] - tp[x - 1] == tq[y] - tq[x - 1]){
return ((m[y] - m[x - 1]) / 2) + ((m[y] - m[x - 1]) % 2);
}
return -1;
}
int main(){
string p, q;
int i;
cin >> p >> q >> i;
init(p, q);
for (int j = 0; j < i; ++j){
int a, b;
cin >> a >> b;
cout << get_distance(a, b) << endl;
}
return 0;
}