제출 #998810

#제출 시각아이디문제언어결과실행 시간메모리
998810spensaDNA 돌연변이 (IOI21_dna)C++17
100 / 100
43 ms6168 KiB
#include <bits/stdc++.h>
#include "dna.h"
using namespace std;
typedef long long ll;

const int MXN = 1e5 +10;
int ac[MXN] = {0};
int ca[MXN] = {0};
int at[MXN] = {0};
int ta[MXN] = {0};
int ct[MXN] = {0};
int tc[MXN] = {0};

int N;
void init(std::string a, std::string b) {
    N = a.length();
    for(int i=0; i<N; i++){
        if(i!=0){
            ac[i] = ac[i-1];
            ca[i] = ca[i-1];
            at[i] = at[i-1];
            ta[i] = ta[i-1];
            ct[i] = ct[i-1];
            tc[i] = tc[i-1];
        }

        if(a[i]=='A' && b[i]=='C') ac[i]++;
        if(a[i]=='C' && b[i]=='A') ca[i]++;
        if(a[i]=='A' && b[i]=='T') at[i]++;
        if(a[i]=='T' && b[i]=='A') ta[i]++;
        if(a[i]=='C' && b[i]=='T') ct[i]++;
        if(a[i]=='T' && b[i]=='C') tc[i]++;
    }

    // for(int i=0; i<N; i++) cout<<ca[i]<<" ";
    // cout<<"\n";
}


int get_distance(int x, int y) {
    ll tac, tca, tat, tta, tct, ttc;
    tac = ac[y]; tca = ca[y]; tat = at[y];
    tta = ta[y]; tct = ct[y]; ttc = tc[y];
    if(x!=0){
        tac -= ac[x-1]; tca -= ca[x-1]; tat -= at[x-1];
        tta -= ta[x-1]; tct -= ct[x-1]; ttc -= tc[x-1];            
    }

    ll ans = 0LL;
    ans += (min(tac,tca) + min(tat,tta) + min(tct,ttc));
    ll t1, t2, t3;

    if(tac<tca){
        tca -= tac;
        tac = 0;
        t1 = tca;
    }
    else{
        tac -= tca;
        tca = 0;
        t1 = tac;
    }

    if(tat<tta){
        tta -= tat;
        tat = 0;
        t2 = tta;
    }
    else{
        tat -= tta;
        tta = 0;
        t2 = tat;
    }

    if(tct<ttc){
        ttc -= tct;
        tct = 0;
        t3 = ttc;
    }
    else{
        tct -= ttc;
        ttc = 0;
        t3 = tct;
    }

    // cout<<"t1="<<t1<<" t2="<<t2<<" t3="<<t3<<"\n";
    if(!((t1==t2) && (t2==t3))) return -1;

    if((t1==tac && t2==tct && t3==tta) || (t1==tca && t2==ttc && t3==tat)){
        ans += (t1*2);
        return ans;
    }

    return -1;

}
#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...