Submission #1189556

#TimeUsernameProblemLanguageResultExecution timeMemory
1189556pxsitDNA 돌연변이 (IOI21_dna)C++20
100 / 100
20 ms4876 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 = AT[y], ta = TA[y], ac = AC[y], ca = CA[y], tc = TC[y], ct = CT[y];
    if(x != 0)
        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, ct -= 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...