Submission #1198737

#TimeUsernameProblemLanguageResultExecution timeMemory
1198737alenhsiaoMutating DNA (IOI21_dna)C++20
0 / 100
21 ms4572 KiB
#include "dna.h"
#include <vector>
using namespace std;

vector<int> AC, AT, CA, CT, TA, TC;
void init(std::string a, std::string b) {
	int n = a.size();
	AC.resize(n+1);
	AT.resize(n+1);
	CA.resize(n+1);
	CT.resize(n+1);
	TA.resize(n+1);
	TC.resize(n+1);
	for (int i = 0; i < n; i++) {
		if (a[i] == 'A' && b[i] == 'C') AC[i+1] = AC[i] + 1;
		if (a[i] == 'A' && b[i] == 'T') AT[i+1] = AT[i] + 1;
		if (a[i] == 'C' && b[i] == 'A') CA[i+1] = CA[i] + 1;
		if (a[i] == 'C' && b[i] == 'T') CT[i+1] = CT[i] + 1;
		if (a[i] == 'T' && b[i] == 'A') TA[i+1] = TA[i] + 1;
		if (a[i] == 'T' && b[i] == 'C') TC[i+1] = TC[i] + 1;
	}
}

int get_distance(int x, int y) {
	int ac = AC[y+1] - AC[x];
	int at = AT[y+1] - AT[x];
	int ca = CA[y+1] - CA[x];
	int ct = CT[y+1] - CT[x];
	int ta = TA[y+1] - TA[x];
	int tc = TC[y+1] - TC[x];
	if(ac + at != ca + ta) return -1;
	if(ca + ct != ta + tc) return -1;
	if(ta + tc != ac + at) return -1;

	int ans = 0;
	ans += ac + at + ca + ct + ta + tc;
	ans += min(ac, ca) + min(at, ta) + min(ct, tc) + 2 * abs(ac - ca);

	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...