제출 #978231

#제출 시각아이디문제언어결과실행 시간메모리
978231AmaarsaaDNA 돌연변이 (IOI21_dna)C++17
0 / 100
30 ms5880 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) { x --; 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; ab += ba; ac += ca; bc += cb; int s = ab + bc + ac; if ( ab * 2 == s) return ab + ans; if ( ac * 2 == s) return ac + ans; if ( bc * 2 == s) return bc + ans; return -1; }
#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...