제출 #529025

#제출 시각아이디문제언어결과실행 시간메모리
529025happypotatoDNA 돌연변이 (IOI21_dna)C++17
100 / 100
47 ms7408 KiB
#include "dna.h"
#include <bits/stdc++.h>
using namespace std;
const int mxN = 1e5 + 1;
int ps[mxN][9];
map<char, int> conv = {{'A', 0}, {'C', 1}, {'T', 2}};
void init(string a, string b) {
    int n = a.length();
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < 9; j++) {
            ps[i][j] = ps[i - 1][j];
            ps[i][j] = ps[i - 1][j];
        }
        ps[i][conv[a[i - 1]] * 3 + conv[b[i - 1]]]++;
    }
}
int get_distance(int x, int y) {
    x++; y++;
    int freq[9];
    for (int i = 0; i < 9; i++) freq[i] = ps[y][i] - ps[x - 1][i];
    int ans = 0;
    int cur;
    freq[0] = freq[4] = freq[8] = 0;
    cur = min(freq[1], freq[3]); ans += cur; freq[1] -= cur; freq[3] -= cur; // 01
    cur = min(freq[2], freq[6]); ans += cur; freq[2] -= cur; freq[6] -= cur; // 02
    cur = min(freq[5], freq[7]); ans += cur; freq[5] -= cur; freq[7] -= cur; // 12
    cur = min({freq[1], freq[5], freq[6]}); ans += cur * 2; freq[1] -= cur; freq[5] -= cur; freq[6] -= cur; // 012
    cur = min({freq[2], freq[7], freq[3]}); ans += cur * 2; freq[2] -= cur; freq[7] -= cur; freq[3] -= cur; // 021
    for (int i = 0; i < 9; i++) {
        if (freq[i]) return -1;
    }
    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...