Submission #1318665

#TimeUsernameProblemLanguageResultExecution timeMemory
1318665nikaa123DNA 돌연변이 (IOI21_dna)C++20
100 / 100
23 ms7296 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2e5+5; int n; int prefaa[N],prefat[N],prefac[N],prefba[N],prefbt[N],prefbc[N]; int prefAT[N],prefTA[N],prefAC[N],prefCA[N],prefTC[N],prefCT[N]; void init(string a, string b) { n = a.size(); a = " " + a; b = " " + b; for (int i = 1; i <= n; i++) { prefaa[i] = prefaa[i-1] + (a[i] == 'A'); prefat[i] = prefat[i-1] + (a[i] == 'T'); prefac[i] = prefac[i-1] + (a[i] == 'C'); prefba[i] = prefba[i-1] + (b[i] == 'A'); prefbt[i] = prefbt[i-1] + (b[i] == 'T'); prefbc[i] = prefbc[i-1] + (b[i] == 'C'); } for (int i = 1; i <= n ; i++) { prefAT[i] = prefAT[i-1] + (a[i] == 'A' && b[i] == 'T'); prefTA[i] = prefTA[i-1] + (a[i] == 'T' && b[i] == 'A'); prefAC[i] = prefAC[i-1] + (a[i] == 'A' && b[i] == 'C'); prefCA[i] = prefCA[i-1] + (a[i] == 'C' && b[i] == 'A'); prefCT[i] = prefCT[i-1] + (a[i] == 'C' && b[i] == 'T'); prefTC[i] = prefTC[i-1] + (a[i] == 'T' && b[i] == 'C'); } } int get_distance(int x, int y) { y++; if (prefaa[y]-prefaa[x] != prefba[y]-prefba[x]) return -1; if (prefat[y]-prefat[x] != prefbt[y]-prefbt[x]) return -1; if (prefac[y]-prefac[x] != prefbc[y]-prefbc[x]) return -1; int at = prefAT[y]-prefAT[x]; int ta = prefTA[y]-prefTA[x]; int ac = prefAC[y]-prefAC[x]; int ca = prefCA[y]-prefCA[x]; int ct = prefCT[y]-prefCT[x]; int tc = prefTC[y]-prefTC[x]; int mn1 = min(at,ta); int mn2 = min(ac,ca); int mn3 = min(ct,tc); int ans = 0; ans += (mn1 + mn2 + mn3); at -= mn1; ta -= mn1; ac -= mn2; ca -= mn2; ct -= mn3; tc -= mn3; ans += 2*max(at,ta); 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...