Submission #1179652

#TimeUsernameProblemLanguageResultExecution timeMemory
1179652madamadam3Mutating DNA (IOI21_dna)C++20
35 / 100
19 ms4936 KiB
#include "dna.h"
#include <bits/stdc++.h>

using namespace std;

using vi = vector<int>;

int n;
string A, B;
vi acount[2], tcount[2], ps;

void init(string a, string b) {
	A = a;
	B = b;
	n = (int) a.size();

	acount[0].assign(n + 1, 0);
	acount[1].assign(n + 1, 0);
	tcount[0].assign(n + 1, 0);
	tcount[1].assign(n + 1, 0);
	ps.assign(n + 1, 0);

	for (int i = 0; i < n; i++) {
		ps[i + 1] = ps[i];
		acount[0][i + 1] = acount[0][i];
		acount[1][i + 1] = acount[1][i];
		tcount[0][i + 1] = tcount[0][i];
		tcount[1][i + 1] = tcount[1][i];

		bool aA = a[i] == 'A', aT = a[i] == 'T';
		bool bA = b[i] == 'A', bT = b[i] == 'T';

		if (aT && bA) {
			ps[i + 1] ++;
		}
		if (aA) acount[0][i+1]++;
		if (aT) tcount[0][i+1]++;
		if (bA) acount[1][i+1]++;
		if (bT) tcount[1][i+1]++;
		
		// cout << "a[" << i << "] = " << a[i] << " and b[" << i << "] = " << b[i] << "\n"; 
		// cout << "ps[" << i+1 << "] = " << ps[i+1] << "\n";
		// cout << "is there a mismatch? " << ((a[i] == 'T' && b[i] == 'A') ? 1 : 0) << "\n";
	}
}

int get_distance(int x, int y) {
	int aA = acount[0][y + 1] - acount[0][x];
	int bA = acount[1][y + 1] - acount[1][x];
	int aT = tcount[0][y + 1] - tcount[0][x];
	int bT = tcount[1][y + 1] - tcount[1][x];

	if ((aA != bA) || (aT != bT)) {
		return -1;
	}
	// cout << "ps[y+1] = " << ps[y + 1] << " and ps[x] = " << ps[x] << "\n";
	return ps[y + 1] - ps[x];
}
#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...