Submission #1083537

#TimeUsernameProblemLanguageResultExecution timeMemory
1083537Roumak77Mutating DNA (IOI21_dna)C++17
100 / 100
48 ms20680 KiB
#pragma GCC optimize ("O3")
#pragma GCC optimize ("unroll-loops")
#pragma GCC optimize("-Ofast")
#include <bits/stdc++.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <limits>
#include <cmath>
#include <stack>
#include <queue>
#include <map>
#include <math.h>
using namespace std;

string a, b;
vector<vector<int>> cnts1(100001, vector<int>{0, 0, 0}); // a, t, c
vector<vector<int>> cnts2(100001, vector<int>{0, 0, 0});
vector<vector<int>> list_n(100001, vector<int>{0, 0, 0, 0, 0, 0}); //at, ta, ac, ca, tc, ct




void init(string a1, string b1){

    a = a1;
    b = b1;

    for(int i = 0; i < a1.size(); i++){
        cnts1[i + 1][0] = cnts1[i][0];
        cnts1[i + 1][1] = cnts1[i][1];
        cnts1[i + 1][2] = cnts1[i][2];

        cnts2[i + 1][0] = cnts2[i][0];
        cnts2[i + 1][1] = cnts2[i][1];
        cnts2[i + 1][2] = cnts2[i][2];

        list_n[i + 1][0] = list_n[i][0];
        list_n[i + 1][1] = list_n[i][1];
        list_n[i + 1][2] = list_n[i][2];
        list_n[i + 1][3] = list_n[i][3];
        list_n[i + 1][4] = list_n[i][4];
        list_n[i + 1][5] = list_n[i][5];


        if(a1[i] == 'A'){
            cnts1[i + 1][0]++;
            if(b1[i] == 'A'){
                cnts2[i + 1][0]++;
            }else if(b1[i] == 'T'){
                cnts2[i + 1][1]++;
                list_n[i + 1][0]++;
            }else{
                cnts2[i + 1][2]++;
                list_n[i + 1][2]++;
            }
        }else if(a1[i] == 'T'){

            cnts1[i + 1][1]++;
            if(b1[i] == 'T'){
                cnts2[i + 1][1]++;
            }else if(b1[i] == 'A'){
                cnts2[i + 1][0]++;
                list_n[i + 1][1]++;
            }else{
                cnts2[i + 1][2]++;
                list_n[i + 1][4]++;
            }


        }else{

            cnts1[i + 1][2]++;
            if(b1[i] == 'C'){
                cnts2[i + 1][2]++;
            }else if(b1[i] == 'A'){
                cnts2[i + 1][0]++;
                list_n[i + 1][3]++;
            }else{
                cnts2[i + 1][1]++;
                list_n[i + 1][5]++;
            }

        }
    }

}

int get_distance(int x, int y){

    int total = 0;



    if(cnts2[y + 1][0] - cnts2[x][0] != cnts1[y + 1][0] - cnts1[x][0]){
        return -1;
    }

    if(cnts2[y + 1][1] - cnts2[x][1] != cnts1[y + 1][1] - cnts1[x][1]){
        return -1;
    }

    if(cnts2[y + 1][2] - cnts2[x][2] != cnts1[y + 1][2] - cnts1[x][2]){
        return -1;
    }



    total += min(list_n[y + 1][0] - list_n[x][0], list_n[y + 1][1] - list_n[x][1]);
    total += abs((list_n[y + 1][0] - list_n[x][0]) - (list_n[y + 1][1] - list_n[x][1])) * 2;
    total += min(list_n[y + 1][2] - list_n[x][2], list_n[y + 1][3] - list_n[x][3]);

    total += min(list_n[y + 1][4] - list_n[x][4], list_n[y + 1][5] - list_n[x][5]);


    return total;



}


Compilation message (stderr)

dna.cpp: In function 'void init(std::string, std::string)':
dna.cpp:29:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     for(int i = 0; i < a1.size(); i++){
      |                    ~~^~~~~~~~~~~
#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...