제출 #1216851

#제출 시각아이디문제언어결과실행 시간메모리
1216851islam_2010DNA 돌연변이 (IOI21_dna)C++20
35 / 100
19 ms3916 KiB
#pragma GCC optimize("O3")
#include "dna.h"
#include <bits/stdc++.h>
using namespace std;

string s, c;
const int sz = 100005;
int pref_diff[sz], pref_A_s[sz], pref_A_c[sz];

void init(string a, string b){
    s = a;
    c = b;
    int n = s.size();
    pref_diff[0] = (s[0] != c[0]);
    pref_A_s[0] = (s[0] == 'A');
    pref_A_c[0] = (c[0] == 'A');

    for (int i = 1; i < n; ++i) {
        pref_diff[i] = pref_diff[i-1] + (s[i] != c[i]);
        pref_A_s[i] = pref_A_s[i-1] + (s[i] == 'A');
        pref_A_c[i] = pref_A_c[i-1] + (c[i] == 'A');
    }
}

int get_distance(int x, int y){
    int a1 = pref_A_s[y] - (x > 0 ? pref_A_s[x-1] : 0);
    int a2 = pref_A_c[y] - (x > 0 ? pref_A_c[x-1] : 0);

    if (a1 != a2) return -1;

    bool match = true;
    for (int i = x; i <= y; ++i) {
        if (s[i] != c[i]) {
            match = false;
            break;
        }
    }
    if (match) return 0;

    int mismatch = pref_diff[y] - (x > 0 ? pref_diff[x-1] : 0);

    return (mismatch + 1) / 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...