Submission #947729

#TimeUsernameProblemLanguageResultExecution timeMemory
947729biankMutating DNA (IOI21_dna)C++17
100 / 100
28 ms6168 KiB
#include <bits/stdc++.h>

using namespace std;

#define sz(x) int(x.size())

const int MAX_M = 6;
const string s1 = "ACTACT";
const string s2 = "CAATTC";

vector<int> p[MAX_M];

void init(string a, string b) {
	int n = sz(a);
	for (int i = 0; i < MAX_M; i++) {
		p[i].assign(n + 1, 0);
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < MAX_M; j++) {
			p[j][i + 1] = p[j][i] + (a[i] == s1[j] && b[i] == s2[j]);
		}
	}
}

int get_distance(int x, int y) {
	int cant[MAX_M];
	for (int i=0; i < MAX_M; i++) {
		cant[i] = p[i][y+1] - p[i][x];
	}
	int ans = 0;
	for (int i = 0; i < MAX_M; i += 2) {
		int moves = min(cant[i], cant[i + 1]);
		cant[i] -= moves;
		cant[i + 1] -= moves;
		ans += moves;
	}
    for (int i = 0; i < MAX_M - 2; i++) {
        if (cant[i] != cant[i + 2]) return -1;
    }
	ans += 2 * cant[0] + 2 * cant[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...