Submission #1339316

#TimeUsernameProblemLanguageResultExecution timeMemory
1339316kawhietMutating DNA (IOI21_dna)C++20
21 / 100
20 ms5800 KiB
#include <bits/stdc++.h>
#include "dna.h"
using namespace std;

int n;
vector<int> a, b, cnt;
vector<vector<int>> p1, p2;

void init(string A, string B) {
	n = A.size();
	a.resize(n);
	b.resize(n);
	for (int i = 0; i < n; i++) {
		if (A[i] == 'A') {
			a[i] = 0;
		} else if (A[i] == 'T') {
			a[i] = 1;
		} else {
			a[i] = 2;
		}
		if (B[i] == 'A') {
			b[i] = 0;
		} else if (B[i] == 'T') {
			b[i] = 1;
		} else {
			b[i] = 2;
		}
	}
	p1.resize(3, vector<int>(n + 1));
	p2.resize(3, vector<int>(n + 1));
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < n; j++) {
			p1[i][j + 1] = p1[i][j] + (a[j] == i);
			p2[i][j + 1] = p2[i][j] + (b[j] == i);
		}
	}
	cnt.resize(n + 1);
	for (int i = 0; i < n; i++) {
		cnt[i + 1] = cnt[i] + (a[i] == b[i]);
	}
}

int get_distance(int l, int r) {
	for (int i = 0; i < 3; i++) {
		if (p1[i][r + 1] - p1[i][l] != p2[i][r + 1] - p2[i][l]) {
			return -1;
		}
	}
	int x = r - l + 1 - cnt[r + 1] + cnt[l];
	return (x / 3 * 2) + ((x % 3) / 2);
}
#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...