#include "dna.h"
#include <unordered_set>
#include <unordered_map>
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
#include <iomanip>
#include <numeric>
using namespace std;
string as;
string ab;
vector<int> tc;
vector<int> ct;
vector<int> ta;
vector<int> at;
vector<int> ac;
vector<int> ca;
void init(std::string a, std::string b) {
    as = a;
    ab = b;
    for (size_t i = 0; i < a.length(); i++) {
        if (as[i] == 'T' && ab[i] == 'C') tc.push_back(i);
        else if (as[i] == 'C' && ab[i] == 'T') ct.push_back(i);
        else if (as[i] == 'T' && ab[i] == 'A') ta.push_back(i);
        else if (as[i] == 'A' && ab[i] == 'T') at.push_back(i);
        else if (as[i] == 'A' && ab[i] == 'C') ac.push_back(i);
        else if (as[i] == 'C' && ab[i] == 'A') ca.push_back(i);
    }   
}
int get_distance(int x, int y) {
    string p1 = ab.substr(x,y-x+1);
    string p2 = as.substr(x,y-x+1);
    sort(p1.begin(),p1.end());
    sort(p2.begin(),p2.end());
    if (p1 == p2) {
        int tcn = 0;
        int ctn = 0;
        int tanm = 0;
        int atnm = 0;
        int acn = 0;
        int can = 0;
        
        for (size_t i = 0; i < tc.size();i++) {
            if (tc[i] >= x && tc[i] <= y) {
                tcn++;
            }
        }
        
        for (size_t i = 0; i < ct.size();i++) {
            if (ct[i] >= x && ct[i] <= y) {
                ctn++;
            }
        }
        
        for (size_t i = 0; i < ta.size();i++) {
            if (ta[i] >= x && ta[i] <= y) {
                tanm++;
            }
        }
        
        for (size_t i = 0; i < at.size();i++) {
            if (at[i] >= x && at[i] <= y) {
                atnm++;
            }
        }
        
        for (size_t i = 0; i < ac.size();i++) {
            if (ac[i] >= x && ac[i] <= y) {
                acn++;
            }
        }
        
        for (size_t i = 0; i < ca.size();i++) {
            if (ca[i] >= x && ca[i] <= y) {
                can++;
            }
        }
        
        int ans = 0;
        std::cout << tcn << " " << ctn << " " << acn << " " << can << " " << tanm << " " << atnm << std::endl;
        int tcmk = min(tcn,ctn);
        tcn -= tcmk;
        ctn -= tcmk;
        
        int tamk = min(tanm,atnm);
        tanm -= tamk;
        atnm -= tamk;
        
        int camk = min(can,acn);
        acn -= camk;
        acn -= camk;
        
        ans += (camk+tamk+tcmk);
        ans += ((tcn+ctn+acn+can+tanm+atnm)/3)*2;
            
	    return ans;
    } else {
        return -1;
    }
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |