제출 #1131261

#제출 시각아이디문제언어결과실행 시간메모리
1131261ozner77DNA 돌연변이 (IOI21_dna)C++20
100 / 100
69 ms8360 KiB
#define ll long long #include <bits/stdc++.h> using namespace std; int n; string a1,b1; vector<int> V; map<char,map<char,vector<int>>> M; map<char,vector<int>> M2; map<char,vector<int>> M1; void init(string a,string b){ a1=a;b1=b; V.push_back(0); M['A']['T'].push_back(0); M['A']['C'].push_back(0); M['T']['A'].push_back(0); M['T']['C'].push_back(0); M['C']['A'].push_back(0); M['C']['T'].push_back(0); for(int i=0;i<a1.size();i++){ if(a1[i]!=b1[i]){ if (a1[i] == 'A' && b1[i] == 'T') { M['A']['T'].push_back(M['A']['T'][i] + 1); M['A']['C'].push_back(M['A']['C'][i]); M['T']['A'].push_back(M['T']['A'][i]); M['T']['C'].push_back(M['T']['C'][i]); M['C']['A'].push_back(M['C']['A'][i]); M['C']['T'].push_back(M['C']['T'][i]); } if (a1[i] == 'A' && b1[i] == 'C') { M['A']['T'].push_back(M['A']['T'][i]); M['A']['C'].push_back(M['A']['C'][i] + 1); M['T']['A'].push_back(M['T']['A'][i]); M['T']['C'].push_back(M['T']['C'][i]); M['C']['A'].push_back(M['C']['A'][i]); M['C']['T'].push_back(M['C']['T'][i]); } if (a1[i] == 'T' && b1[i] == 'A') { M['A']['T'].push_back(M['A']['T'][i]); M['A']['C'].push_back(M['A']['C'][i]); M['T']['A'].push_back(M['T']['A'][i] + 1); M['T']['C'].push_back(M['T']['C'][i]); M['C']['A'].push_back(M['C']['A'][i]); M['C']['T'].push_back(M['C']['T'][i]); } if (a1[i] == 'T' && b1[i] == 'C') { M['A']['T'].push_back(M['A']['T'][i]); M['A']['C'].push_back(M['A']['C'][i]); M['T']['A'].push_back(M['T']['A'][i]); M['T']['C'].push_back(M['T']['C'][i] + 1); M['C']['A'].push_back(M['C']['A'][i]); M['C']['T'].push_back(M['C']['T'][i]); } if (a1[i] == 'C' && b1[i] == 'A') { M['A']['T'].push_back(M['A']['T'][i]); M['A']['C'].push_back(M['A']['C'][i]); M['T']['A'].push_back(M['T']['A'][i]); M['T']['C'].push_back(M['T']['C'][i]); M['C']['A'].push_back(M['C']['A'][i] + 1); M['C']['T'].push_back(M['C']['T'][i]); } if (a1[i] == 'C' && b1[i] == 'T') { M['A']['T'].push_back(M['A']['T'][i]); M['A']['C'].push_back(M['A']['C'][i]); M['T']['A'].push_back(M['T']['A'][i]); M['T']['C'].push_back(M['T']['C'][i]); M['C']['A'].push_back(M['C']['A'][i]); M['C']['T'].push_back(M['C']['T'][i] + 1); } }else{ M['A']['T'].push_back(M['A']['T'][i]); M['A']['C'].push_back(M['A']['C'][i]); M['T']['A'].push_back(M['T']['A'][i]); M['T']['C'].push_back(M['T']['C'][i]); M['C']['A'].push_back(M['C']['A'][i]); M['C']['T'].push_back(M['C']['T'][i]); } } M2['C'].push_back(0); M2['T'].push_back(0); M2['A'].push_back(0); M1['C'].push_back(0); M1['T'].push_back(0); M1['A'].push_back(0); for(int i=0;i<a1.size();i++){ if(a1[i]=='C'){ M2[a1[i]].push_back(M2[a1[i]][i]+1); M2['T'].push_back(M2['T'][i]); M2['A'].push_back(M2['A'][i]); } if(a1[i]=='A'){ M2[a1[i]].push_back(M2[a1[i]][i]+1); M2['T'].push_back(M2['T'][i]); M2['C'].push_back(M2['C'][i]); } if(a1[i]=='T'){ M2[a1[i]].push_back(M2[a1[i]][i]+1); M2['A'].push_back(M2['A'][i]); M2['C'].push_back(M2['C'][i]); } } for(int i=0;i<a1.size();i++){ if(b1[i]=='C'){ M1[b1[i]].push_back(M1[b1[i]][i]+1); M1['T'].push_back(M1['T'][i]); M1['A'].push_back(M1['A'][i]); } if(b1[i]=='A'){ M1[b1[i]].push_back(M1[b1[i]][i]+1); M1['T'].push_back(M1['T'][i]); M1['C'].push_back(M1['C'][i]); } if(b1[i]=='T'){ M1[b1[i]].push_back(M1[b1[i]][i]+1); M1['A'].push_back(M1['A'][i]); M1['C'].push_back(M1['C'][i]); } } } int get_distance(int x, int y){ x++; y++; int n1=M2['C'][y]-M2['C'][x-1]; int n2=M2['T'][y]-M2['T'][x-1]; int n3=M2['A'][y]-M2['A'][x-1]; int m1=M1['C'][y]-M1['C'][x-1]; int m2=M1['T'][y]-M1['T'][x-1]; int m3=M1['A'][y]-M1['A'][x-1]; if(n1==m1 && n2==m2 && n3==m3){ int res1=min((M['A']['C'][y] - M['A']['C'][x - 1]),(M['C']['A'][y] - M['C']['A'][x - 1])); int res5=min((M['T']['A'][y] - M['T']['A'][x - 1]),(M['A']['T'][y] - M['A']['T'][x - 1])); int res6=min((M['T']['C'][y] - M['T']['C'][x - 1]),(M['C']['T'][y] - M['C']['T'][x - 1])); int res2 = abs((M['A']['C'][y] - M['A']['C'][x - 1]) - (M['C']['A'][y] - M['C']['A'][x - 1])); int res3 = abs((M['T']['A'][y] - M['T']['A'][x - 1]) - (M['A']['T'][y] - M['A']['T'][x - 1])); int res4 = abs((M['T']['C'][y] - M['T']['C'][x - 1]) - (M['C']['T'][y] - M['C']['T'][x - 1])); int res=((res2+res3+res4)/3)*2; res=res+(res1+res5+res6); return res; } 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...