Submission #439309

#TimeUsernameProblemLanguageResultExecution timeMemory
4393094fectaDNA 돌연변이 (IOI21_dna)C++17
100 / 100
53 ms4872 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pii pair<int, int>
#define f first
#define s second
#define boost() cin.tie(0), cin.sync_with_stdio(0)

const int MN = 100005;

int n, ac[MN], ca[MN], ct[MN], tc[MN], ta[MN], at[MN];

void init(string a, string b) {
    n = a.size();
    for (int i = 1; i <= n; i++) {
        char f = a[i - 1], s = b[i - 1];
        if (f == 'A' && s == 'C') ac[i]++;
        if (f == 'C' && s == 'A') ca[i]++;
        if (f == 'C' && s == 'T') ct[i]++;
        if (f == 'T' && s == 'C') tc[i]++;
        if (f == 'T' && s == 'A') ta[i]++;
        if (f == 'A' && s == 'T') at[i]++;
        ac[i] += ac[i - 1];
        ca[i] += ca[i - 1];
        ct[i] += ct[i - 1];
        tc[i] += tc[i - 1];
        ta[i] += ta[i - 1];
        at[i] += at[i - 1];
    }
}

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