| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 1142646 | mouataz_the_giant | Mutating DNA (IOI21_dna) | C++17 | 0 ms | 0 KiB | 
#include <bits/stdc++.h>
#include "dna.h"
using namespace std;
void init(string x,string y);
int get_distance(int x,int y);
string u,v;
void init(string a,string b){
    u = a;
    v = b;
}
int get_distance(int x,int y){
    int t1 = 0;
    int t2 = 0;
    int a11 = 0;
    int a22 = 0;
    int c1 = 0;
    int c2 = 0;
    int pot = 0;
    int ans = 0;
    int t_a = 0;
    int a_t = 0;
    int a_c = 0;
    int c_a = 0;
    int t_c = 0;
    int c_t = 0;
    string a1 = u.substr(x,y-x+1);
    string b1 = v.substr(x,y-x+1);
    for(int i = 0;i < a1.length();i++){
        if(a[i] == 'T'){
            t1++;
        }
        if(b[i] == 'T'){
            t2++;
        }
        if(a[i] == 'A'){
            a11++;
        }
        if(b[i] == 'A'){
            a22++;
        }
        if(a[i] == 'C'){
            c1++;
        }
        if(b[i] == 'C'){
            c2++;
        }
        if(a1[i] == 'T' && b1[i] == 'A'){
            t_a++;
        }
        if(a1[i] == 'A' && b1[i] == 'T'){
            a_t++;
        }
        if(a1[i] == 'A' && b1[i] == 'C'){
            a_c++;
        }
        if(a1[i] == 'C' && b1[i] == 'A'){
            c_a++;
        }
        if(a1[i] == 'T' && b1[i] == 'C'){
            t_c++;
        }
        if(a1[i] == 'C' && b1[i] == 'T'){
            c_t++;
        }
    }
    if(((c1 != c2) || (t1 != t2)) || (a1 != a2)){
        return -1;
    }
    ans += min(a_c,c_a);
    ans += min(t_a,a_t);
    ans += min(t_c,c_t);
    pot += max(a_c,c_a) - min(a_c,c_a);
    pot += max(a_t,t_a) - min(a_t,t_a);
    pot += max(t_c,c_t) - min(t_c,c_t);
    ans += (pot/3) * 2;
    return ans;
}
