Submission #1174262

#TimeUsernameProblemLanguageResultExecution timeMemory
1174262PagodePaivaMutating DNA (IOI21_dna)C++20
100 / 100
29 ms6152 KiB
#include "dna.h"
#include<bits/stdc++.h>

using namespace std;

const int N = 100010;
int cnt[N][3][3];

void init(std::string a, std::string b) {
    for(int i = 1;i <= a.size();i++){
        int x = (a[i-1] == 'A' ? 0 : (a[i-1] == 'C' ? 1 : 2));
        int y = (b[i-1] == 'A' ? 0 : (b[i-1] == 'C' ? 1 : 2));
        for(int j = 0;j < 3;j++){
            for(int k = 0;k < 3;k++){
                cnt[i][j][k] = cnt[i-1][j][k];

            }
        }
        cnt[i][x][y]++;
    }
    return;
}

int get_distance(int x, int y) {
    x++;
    y++;
    int val[3][3];
    for(int j = 0;j < 3;j++){
        for(int k = 0;k < 3;k++){
            val[j][k] = cnt[y][j][k]-cnt[x-1][j][k];
           // cout << val[j][k] << ' ';
        }
        //cout << '\n';
    }
    int res = 0;
    for(int j = 0;j < 3;j++){
        for(int k = j+1;k < 3;k++){
            int t = min(val[j][k], val[k][j]);
            res += t;
            val[j][k] -= t;
            val[k][j] -= t;
        }
    }
    int t = min({val[0][1], val[1][2], val[2][0]});
    val[0][1] -= t;
    val[1][2] -= t;
    val[2][0] -= t;
    res += 2*t;
    t = min({val[0][2], val[2][1], val[1][0]});
    val[0][2] -= t;
    val[2][1] -= t;
    val[1][0] -= t;
    res += 2*t;
    for(int j = 0;j < 3;j++){
        for(int k = 0;k < 3;k++){
            if(j == k) continue;
            if(val[j][k] != 0) return -1;
        }
    }
    return res;
}
#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...