Submission #1255778

#TimeUsernameProblemLanguageResultExecution timeMemory
1255778ereringMutating DNA (IOI21_dna)C++20
100 / 100
43 ms27144 KiB
#include <bits/stdc++.h> #include "dna.h" using namespace std; const int MAXN=1e5+5; int pref[MAXN][27][2]; int cnt[MAXN][3][3]; void init(std::string a, std::string b) { for(int i=0;i<a.size();i++){ int x=0,y=0; if(a[i]=='C')x=1; if(a[i]=='T')x=2; if(b[i]=='C')y=1; if(b[i]=='T')y=2; cnt[i][x][y]++; pref[i][a[i]-'A'][0]++; pref[i][b[i]-'A'][1]++; if(i>0){ for(int j=0;j<3;j++){ for(int k=0;k<3;k++){ cnt[i][j][k]+=cnt[i-1][j][k]; } } for(int j=0;j<26;j++){ pref[i][j][0]+=pref[i-1][j][0]; pref[i][j][1]+=pref[i-1][j][1]; } } } } int get_distance(int x, int y) { for(int j=0;j<26;j++){ if(pref[y][j][0]-(x>0?pref[x-1][j][0]:0)!=pref[y][j][1]-(x>0?pref[x-1][j][1]:0))return -1; } int ans=0; bool flag=0; for(int i=0;i<3;i++){ for(int j=i+1;j<3;j++){ int sc1=cnt[y][i][j]-(x>0?cnt[x-1][i][j]:0); int sc2=cnt[y][j][i]-(x>0?cnt[x-1][j][i]:0); ans+=min(sc1,sc2); if(sc1>sc2 && !flag){ ans+=2*(sc1-sc2); flag=1; } } } return ans; } /* * act cat * cta */
#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...