Submission #978246

#TimeUsernameProblemLanguageResultExecution timeMemory
978246AmaarsaaMutating DNA (IOI21_dna)C++17
100 / 100
28 ms7180 KiB
#include "dna.h" #include<bits/stdc++.h> using namespace std; int a[100004][3][3]; void init(string A, string B) { int n = A.size(); for (int i = 0; i < n; i ++) { if ( A[i] == 'T') A[i] = 'B'; if ( B[i] == 'T') B[i] = 'B'; A[i] += 32; B[i] += 32; for (int j = 0; j <= 2; j ++) { for (int r = 0; r <= 2; r ++) { if ( i == 0) a[i][j][r] = 0; else a[i][j][r] = a[i - 1][j][r]; } } int x = A[i] - 'a'; int y = B[i] - 'a'; a[i][x][y] ++; } } int cnt(int l, int r, int x, int y){ int s= a[r][x][y]; if ( l == 0) return s; s -= (a[l - 1][x][y]); return s; } int get_distance(int x, int y) { int ans = 0; int ab = cnt(x, y, 0, 1), ba = cnt(x, y, 1, 0), ac = cnt(x, y, 0, 2), ca = cnt(x, y, 2, 0), bc = cnt(x, y, 1, 2), cb = cnt(x, y, 2, 1); x = min(ab, ba); ans += x; ab -= x; ba -= x; x = min(ac, ca); ans += x; ac -= x; ca -= x; x = min(bc, cb); ans += x; bc -= x; cb -= x; if ( ab == 0 && ba == 0 && ca == 0 && ac == 0 && bc == 0 && cb == 0) return ans; if ( (ab == 0 || bc == 0 || ca == 0) && (ba == 0 || ac == 0 || cb == 0)) return -1; ab += ba; bc += cb; ac += ca; int s = ab + bc + ac; if ( ac != ab || ac != bc || ab != bc) return -1; return ans + s - max(ab, max(bc, ac)); }
#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...