Submission #437138

#TimeUsernameProblemLanguageResultExecution timeMemory
437138sofapudenMutating DNA (IOI21_dna)C++17
100 / 100
64 ms6420 KiB
#include<bits/stdc++.h> #include "dna.h" using namespace std; vector<int> match, ac, ca, at, ta, ct, tc, A, C, T; void init(std::string a, std::string b) { int n = a.size(); match.resize(n,0); ac.resize(n,0); ca.resize(n,0); at.resize(n,0); ta.resize(n,0); ct.resize(n,0); tc.resize(n,0); A.resize(n,0); C.resize(n,0); T.resize(n,0); for(int i = 0; i < n; ++i){ if(a[i] == b[i])match[i]=1; if(a[i] == 'A' && b[i] == 'C')ac[i]=1; if(a[i] == 'C' && b[i] == 'A')ca[i]=1; if(a[i] == 'A' && b[i] == 'T')at[i]=1; if(a[i] == 'T' && b[i] == 'A')ta[i]=1; if(a[i] == 'C' && b[i] == 'T')ct[i]=1; if(a[i] == 'T' && b[i] == 'C')tc[i]=1; if(a[i] == 'A')A[i]++; if(a[i] == 'C')C[i]++; if(a[i] == 'T')T[i]++; if(b[i] == 'A')A[i]--; if(b[i] == 'C')C[i]--; if(b[i] == 'T')T[i]--; } for(int i = 1; i < n; ++i){ match[i]+=match[i-1]; ac[i]+=ac[i-1]; ca[i]+=ca[i-1]; at[i]+=at[i-1]; ta[i]+=ta[i-1]; ct[i]+=ct[i-1]; tc[i]+=tc[i-1]; A[i]+=A[i-1]; C[i]+=C[i-1]; T[i]+=T[i-1]; } } int get_distance(int x, int y) { int ans = 0; int dis = y-x+1; if(x == 0){ if(A[y]|C[y]|T[y])return -1; dis-=match[y]; ans+=min(ac[y],ca[y]); ans+=min(at[y],ta[y]); ans+=min(tc[y],ct[y]); dis-=2*ans; return ans+(dis/3)*2; } else{ if((A[y]-A[x-1])|(C[y]-C[x-1])|(T[y]-T[x-1]))return -1; dis-=match[y]-match[x-1]; ans+=min(ac[y]-ac[x-1],ca[y]-ca[x-1]); ans+=min(at[y]-at[x-1],ta[y]-ta[x-1]); ans+=min(tc[y]-tc[x-1],ct[y]-ct[x-1]); dis-=2*ans; return ans+(dis/3)*2; } }
#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...