제출 #966366

#제출 시각아이디문제언어결과실행 시간메모리
966366KasymKDNA 돌연변이 (IOI21_dna)C++17
56 / 100
30 ms5816 KiB
#include "dna.h"
#include "bits/stdc++.h"
 
using namespace std;
 
string s, s2;

int n;

const int N = 1e5 + 3;

int den_daller[N], A_koplulik_s[N], T_koplulik_s[N], A_koplulik_s2[N], T_koplulik_s2[N];

void init(string a, string b){
    s = a, s2 = b;
    n = (int)s.size();
    for(int i = 0; i < n; ++i){
        den_daller[i + 1] = den_daller[i] + (s[i] != s2[i]);
        A_koplulik_s[i + 1] = A_koplulik_s[i] + (s[i] == 'A');
        T_koplulik_s[i + 1] = T_koplulik_s[i] + (s[i] == 'T');
        A_koplulik_s2[i + 1] = A_koplulik_s2[i] + (s2[i] == 'A');
        T_koplulik_s2[i + 1] = T_koplulik_s2[i] + (s2[i] == 'T');
    }
}
 
int get_distance(int x, int y){
    if(y - x <= 2){
        int s_a = 0, s_c = 0, s_t = 0;
        int s2_a = 0, s2_c = 0, s2_t = 0;
        for(int i = x; i <= y; ++i){
            s_a += (s[i] == 'A');
            s_c += (s[i] == 'C');
            s_t += (s[i] == 'T');
            s2_a += (s2[i] == 'A');
            s2_c += (s2[i] == 'C');
            s2_t += (s2[i] == 'T');
        }
        if(s_a != s2_a or s_c != s2_c or s_t != s2_t)
            return -1;
        int ok = 1;
        for(int i = x; i <= y; ++i)
            ok &= (s[i] == s2[i]);
        if(ok)
            return 0;
        int ans = 0;
        for(int i = x; i <= y; ++i)
            ans += (s[i] != s2[i]);
        ans--;
        return ans;
    }
    int A_diff = A_koplulik_s[y + 1] - A_koplulik_s[x], A_diff2 = A_koplulik_s2[y + 1] - A_koplulik_s2[x];
    int T_diff = T_koplulik_s[y + 1] - T_koplulik_s[x], T_diff2 = T_koplulik_s2[y + 1] - T_koplulik_s2[x];
    if(A_diff != A_diff2 or T_diff != T_diff2)
        return -1;
    int ans = (den_daller[y + 1] - den_daller[x]) >> 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...