제출 #1278719

#제출 시각아이디문제언어결과실행 시간메모리
1278719IBoryDNA 돌연변이 (IOI21_dna)C++20
100 / 100
20 ms4840 KiB
#include "dna.h" #include <algorithm> using namespace std; const int MAX = 100007; int AC[MAX], AT[MAX], CA[MAX], CT[MAX], TA[MAX], TC[MAX]; void init(string a, string b) { for (int i = 1; i <= a.size(); ++i) { AC[i] = AC[i - 1] + (a[i - 1] == 'A' && b[i - 1] == 'C'); AT[i] = AT[i - 1] + (a[i - 1] == 'A' && b[i - 1] == 'T'); CA[i] = CA[i - 1] + (a[i - 1] == 'C' && b[i - 1] == 'A'); CT[i] = CT[i - 1] + (a[i - 1] == 'C' && b[i - 1] == 'T'); TA[i] = TA[i - 1] + (a[i - 1] == 'T' && b[i - 1] == 'A'); TC[i] = TC[i - 1] + (a[i - 1] == 'T' && b[i - 1] == 'C'); } } int get_distance(int x, int y) { x++; y++; int ret = 0; int ac = AC[y] - AC[x - 1]; int at = AT[y] - AT[x - 1]; int ca = CA[y] - CA[x - 1]; int ct = CT[y] - CT[x - 1]; int ta = TA[y] - TA[x - 1]; int tc = TC[y] - TC[x - 1]; int a1 = ac + at; int a2 = ca + ta; int c1 = ca + ct; int c2 = ac + tc; int t1 = ta + tc; int t2 = at + ct; a1 -= min(ac, ca) + min(at, ta); a2 -= min(ac, ca) + min(at, ta); c1 -= min(ac, ca) + min(ct, tc); c2 -= min(ac, ca) + min(ct, tc); t1 -= min(at, ta) + min(ct, tc); t2 -= min(at, ta) + min(ct, tc); ret += min(ac, ca) + min(at, ta) + min(ct, tc); if (a1 != a2 || c1 != c2 || t1 != t2) return -1; else if (a1 != 0) ret += a1 * 2; return ret; }
#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...