제출 #1142666

#제출 시각아이디문제언어결과실행 시간메모리
1142666sam12345678910112DNA 돌연변이 (IOI21_dna)C++20
100 / 100
731 ms31068 KiB
#include "dna.h" #include<bits/stdc++.h> using namespace std; string A,B; map<int,int>at; map<int,int>ta; map<int,int>ac; map<int,int>ca; map<int,int>tc; map<int,int>ct; void init(string a, string b){ at[-1]=0; ac[-1]=0; tc[-1]=0; ta[-1]=0; ct[-1]=0; ca[-1]=0; string A=a; string B=b; for(int so=0;so<a.size();so++){ if(A[so]=='A'&&B[so]=='T'){at[so]=1+at[so-1]; } else {at[so]=at[so-1];} if(A[so]=='T'&&B[so]=='A'){ta[so]=1+ta[so-1];} else {ta[so]=ta[so-1];} if(A[so]=='A'&&B[so]=='C'){ac[so]=1+ac[so-1];} else {ac[so]=ac[so-1];} if(A[so]=='C'&&B[so]=='A'){ca[so]=1+ca[so-1];} else {ca[so]=ca[so-1];} if(A[so]=='C'&&B[so]=='T'){ct[so]=1+ct[so-1];} else {ct[so]=ct[so-1];} if(A[so]=='T'&&B[so]=='C'){tc[so]=1+tc[so-1];} else {tc[so]=tc[so-1];} } } int get_distance(int x, int y){ if(ac[y]+at[y]-ac[x-1]-at[x-1]==ca[y]+ta[y]-ca[x-1]-ta[x-1]&&ca[y]+ct[y]-ca[x-1]-ct[x-1]==ac[y]+tc[y]-ac[x-1]-tc[x-1]&&tc[y]+ta[y]-tc[x-1]-ta[x-1]==ct[y]+at[y]-ct[x-1]-at[x-1]){ int ans=0; ans=(min(at[y]-at[x-1],ta[y]-ta[x-1]))+min(ac[y]-ac[x-1],ca[y]-ca[x-1])+min(tc[y]-tc[x-1],ct[y]-ct[x-1])+(2*abs(at[y]-at[x-1]-ta[y]+ta[x-1])); return ans; } else {return -1;} }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...