Submission #966366

#TimeUsernameProblemLanguageResultExecution timeMemory
966366KasymKMutating DNA (IOI21_dna)C++17
56 / 100
30 ms5816 KiB
#include "dna.h" #include "bits/stdc++.h" using namespace std; string s, s2; int n; const int N = 1e5 + 3; int den_daller[N], A_koplulik_s[N], T_koplulik_s[N], A_koplulik_s2[N], T_koplulik_s2[N]; void init(string a, string b){ s = a, s2 = b; n = (int)s.size(); for(int i = 0; i < n; ++i){ den_daller[i + 1] = den_daller[i] + (s[i] != s2[i]); A_koplulik_s[i + 1] = A_koplulik_s[i] + (s[i] == 'A'); T_koplulik_s[i + 1] = T_koplulik_s[i] + (s[i] == 'T'); A_koplulik_s2[i + 1] = A_koplulik_s2[i] + (s2[i] == 'A'); T_koplulik_s2[i + 1] = T_koplulik_s2[i] + (s2[i] == 'T'); } } int get_distance(int x, int y){ if(y - x <= 2){ int s_a = 0, s_c = 0, s_t = 0; int s2_a = 0, s2_c = 0, s2_t = 0; for(int i = x; i <= y; ++i){ s_a += (s[i] == 'A'); s_c += (s[i] == 'C'); s_t += (s[i] == 'T'); s2_a += (s2[i] == 'A'); s2_c += (s2[i] == 'C'); s2_t += (s2[i] == 'T'); } if(s_a != s2_a or s_c != s2_c or s_t != s2_t) return -1; int ok = 1; for(int i = x; i <= y; ++i) ok &= (s[i] == s2[i]); if(ok) return 0; int ans = 0; for(int i = x; i <= y; ++i) ans += (s[i] != s2[i]); ans--; return ans; } int A_diff = A_koplulik_s[y + 1] - A_koplulik_s[x], A_diff2 = A_koplulik_s2[y + 1] - A_koplulik_s2[x]; int T_diff = T_koplulik_s[y + 1] - T_koplulik_s[x], T_diff2 = T_koplulik_s2[y + 1] - T_koplulik_s2[x]; if(A_diff != A_diff2 or T_diff != T_diff2) return -1; int ans = (den_daller[y + 1] - den_daller[x]) >> 1; return ans; }
#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...