Submission #630661

#TimeUsernameProblemLanguageResultExecution timeMemory
630661tmncollinsMutating DNA (IOI21_dna)C++17
56 / 100
64 ms10936 KiB
#include "dna.h"
#include <stdio.h>
#include <vector>
#include <string>
#include <map>
#include <iostream>

// g++ grader.cpp dna.cpp -o dna

using namespace std;

vector<vector<int>> prefix;
map<char, int> base;

void init(string a, string b) {
    int size = a.size() + 1;
    prefix = vector<vector<int>> (size);
    base['A'] = 0;
    base['C'] = 1;
    base['T'] = 2;

    prefix[0] = {0, 0, 0, 0, 0, 0, 0}; // A, C, T (1), A, C, T (2), diff

    for (int k = 1; k < size; k++) {
        int i = k-1;
        prefix[k] = prefix[k-1];
        prefix[k][base[a[i]]]++;
        prefix[k][base[b[i]]+3]++;
        if (a[i] != b[i]) prefix[k][6]++;
    }

}

int get_distance(int x, int y) {
    vector<int> a = prefix[x], b = prefix[y+1];
    for (int k = 0; k < 7; k++) {
        b[k] -= a[k];
//        cout << b[k] << " ";
    }
//        cout << "\n";



    for (int k = 0; k < 3; k++) if (b[k] != b[k+3]) return -1;

    int ans = b[6] / 2;
    if (b[6] % 2) ans += 1;

    return ans;
}
#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...