제출 #1189554

#제출 시각아이디문제언어결과실행 시간메모리
1189554pxsitMutating DNA (IOI21_dna)C++20
0 / 100
18 ms4608 KiB
#include "dna.h"
#include <bits/stdc++.h>
using namespace std;

int AT[100001], TA[100001], AC[100001], CA[100001], CT[100001], TC[100001];

void init(string a, string b) {
    for (int i=0;i<a.size();i++){
        AT[i] = (i == 0 ? 0 : AT[i-1]) + (a[i] == 'A' && b[i] == 'T');
        TA[i] = (i == 0 ? 0 : TA[i-1]) + (a[i] == 'T' && b[i] == 'A');
        AC[i] = (i == 0 ? 0 : AC[i-1]) + (a[i] == 'A' && b[i] == 'C');
        CA[i] = (i == 0 ? 0 : CA[i-1]) + (a[i] == 'C' && b[i] == 'A');
        TC[i] = (i == 0 ? 0 : TC[i-1]) + (a[i] == 'T' && b[i] == 'C');
        CT[i] = (i == 0 ? 0 : CT[i-1]) + (a[i] == 'C' && b[i] == 'T');
    }
}

int get_distance(int x, int y) {
    int at, ta, ac, ca, tc, ct;
    if(x == 0)
        at = 0, ta = 0, ac = 0, ca = 0, tc = 0, ct = 0;
    else
        at = AT[x-1], ta = TA[x-1], ac = AC[x-1], ca = CA[x-1], tc = TC[x-1], ct = CT[x-1];
    int ans = min(at, ta) + min(ac, ca) + min(tc, ct),m1 = min(at, ta), m2 = min(ac,ca), m3 = min(ct, tc);
    at -= m1, ta -= m1; 
    ac -= m2, ca -= m2; 
    tc -= m3, ta -= m3; 
    if(at-ta+ac-ca != 0 || ct-tc+ca-ac != 0 || ta-at+tc-ct != 0) return -1;
        return ans + ((ac+ca+at+ta+tc+ct)/3)*2;
}
#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...