Submission #1287481

#TimeUsernameProblemLanguageResultExecution timeMemory
1287481putthi_usMutating DNA (IOI21_dna)C++20
100 / 100
21 ms4848 KiB
#include "dna.h" #include<bits/stdc++.h> using namespace std; vector<int> at,ta,tc,ct,ca,ac; void init(std::string a, std::string b) { int n=a.length(); at.resize(n+1); ta.resize(n+1); tc.resize(n+1); ct.resize(n+1); ca.resize(n+1); ac.resize(n+1); at[0]=ta[0]=tc[0]=ct[0]=ca[0]=ac[0]=0; for(int i=0;i<n;i++){ at[i+1]=at[i]; ta[i+1]=ta[i]; tc[i+1]=tc[i]; ct[i+1]=ct[i]; ca[i+1]=ca[i]; ac[i+1]=ac[i]; if(a[i]=='A'&&b[i]=='T'){ at[i+1]++; }else if(a[i]=='T'&&b[i]=='A'){ ta[i+1]++; }else if(a[i]=='T'&&b[i]=='C'){ tc[i+1]++; }else if(a[i]=='C'&&b[i]=='T'){ ct[i+1]++; }else if(a[i]=='C'&&b[i]=='A'){ ca[i+1]++; }else if(a[i]=='A'&&b[i]=='C'){ ac[i+1]++; } } } int get_distance(int x, int y) { y++; int Aa=at[y]-at[x]+ac[y]-ac[x]; int Ta=ta[y]-ta[x]+tc[y]-tc[x]; int Ca=ca[y]-ca[x]+ct[y]-ct[x]; int Ab=ta[y]-ta[x]+ca[y]-ca[x]; int Tb=at[y]-at[x]+ct[y]-ct[x]; int Cb=ac[y]-ac[x]+tc[y]-tc[x]; if(Aa==Ab&&Ca==Cb&&Ta==Tb){ int AT=at[y]-at[x]; int AC=ac[y]-ac[x]; int TA=ta[y]-ta[x]; int TC=tc[y]-tc[x]; int CA=ca[y]-ca[x]; int CT=ct[y]-ct[x]; int m1=min(AT,TA); int m2=min(AC,CA); int m3=min(TC,CT); int rest=(abs(AT-TA)+abs(AC-CA)+abs(CT-TC)); return m1+m2+m3+rest/3*2; } 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...