# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
437436 | Melonade | DNA 돌연변이 (IOI21_dna) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
//yo dayo
#include <bits/stdc++.h>
using namespace std;
int a[100005][7],n,q,x,y,res,tmp;
int ac,at,ca,ct,ta,tc;
string s1,s2;
void init(string aa, string bb){
s1=aa;
s2=bb;
}
int get_distance(int x, int y){
ac=a[y+1][1]-a[x][1];
at=a[y+1][2]-a[x][2];
ca=a[y+1][3]-a[x][3];
ct=a[y+1][4]-a[x][4];
ta=a[y+1][5]-a[x][5];
tc=a[y+1][6]-a[x][6];
res=0;
tmp=min(ac,ca);
res+=tmp;
ac-=tmp;
ca-=tmp;
tmp=min(at,ta);
res+=tmp;
at-=tmp;
ta-=tmp;
tmp=min(tc,ct);
res+=tmp;
tc-=tmp;
ct-=tmp;
tmp=min(ac,min(ct,ta));
res+=tmp*2;
ac-=tmp;
ct-=tmp;
ta-=tmp;
tmp=min(ca,min(tc,at));
res+=tmp*2;
ca-=tmp;
tc-=tmp;
at-=tmp;
if (ac>0 || ca>0 || tc>0 || ct>0 || ta>0 || at>0) return -1;
return res;
}
main()
{
cin>>n>>q;
cin>>s1;
cin>>s2;
init(s1,s2);
for (int i=0;i<n;i++){
a[i+1][1]=a[i][1];
a[i+1][2]=a[i][2];
a[i+1][3]=a[i][3];
a[i+1][4]=a[i][4];
a[i+1][5]=a[i][5];
a[i+1][6]=a[i][6];
if (s1[i]=='A' && s2[i]=='C') a[i+1][1]++;
if (s1[i]=='A' && s2[i]=='T') a[i+1][2]++;
if (s1[i]=='C' && s2[i]=='A') a[i+1][3]++;
if (s1[i]=='C' && s2[i]=='T') a[i+1][4]++;
if (s1[i]=='T' && s2[i]=='A') a[i+1][5]++;
if (s1[i]=='T' && s2[i]=='C') a[i+1][6]++;
}
cout<<"\n\n";
while (q--)
{
cin>>x>>y;
cout<<get_distance(x,y)<<"\n";
}
}