Submission #1234728

#TimeUsernameProblemLanguageResultExecution timeMemory
1234728gry3125Mutating DNA (IOI21_dna)C++20
22 / 100
1595 ms7236 KiB
#include "dna.h"
#include <bits/stdc++.h>
#define ll long long int

using namespace std;
string a, b; int n;
vector<ll> as[3], bs[3];
// [0] = A, [1] = T, [2] = C

int get_distance(int x, int y) {
	for (int i = 0; i < 3; i++) {
		ll suma = as[i][y], sumb = bs[i][y];
		if (x > 0) {
			suma -= as[i][x-1];
			sumb -= bs[i][x-1];
		}
		if (suma != sumb) return -1;
	}
	int cnt = 0;
	for (int i = x; i <= y; i++) {
		if (a[i] != b[i]) cnt++;
	}
	return cnt/2;
}

// int main() {
	// string aa, bb; cin >> aa >> bb;
void init(string aa, string bb) {
	a = aa; b = bb; n = a.size(); 
	for (int i = 0; i < 3; i++) {
		as[i].resize(n); bs[i].resize(n); 
	}
	if (a[0] == 'A') as[0][0]++;
	if (b[0] == 'A') bs[0][0]++;
	if (a[0] == 'T') as[1][0]++;
	if (b[0] == 'T') bs[1][0]++;
	if (a[0] == 'C') as[2][0]++;
	if (b[0] == 'C') bs[2][0]++;
	for (int i = 1; i < n; i++) {
		for (int j = 0; j < 3; j++) {
			as[j][i] = as[j][i-1];
			bs[j][i] = bs[j][i-1];
		}
		if (a[i] == 'A') as[0][i]++;
		if (b[i] == 'A') bs[0][i]++;
		if (a[i] == 'T') as[1][i]++;
		if (b[i] == 'T') bs[1][i]++;
		if (a[i] == 'C') as[2][i]++;
		if (b[i] == 'C') bs[2][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...