# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
708961 | grossly_overconfident | DNA 돌연변이 (IOI21_dna) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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;
}