Submission #1200540

#TimeUsernameProblemLanguageResultExecution timeMemory
1200540PlayVoltzMutating DNA (IOI21_dna)C++20
100 / 100
28 ms7180 KiB
#include "dna.h"
#include <bits/stdc++.h>
using namespace std;

vector <int> a1, a2, c1, c2, t1, t2, at, ta, ct, tc, ac, ca;

void init(string a, string b) {
	int n = a.size();
	a1.resize(n+1, 0);
	c1.resize(n+1, 0);
	t1.resize(n+1, 0);
	a2.resize(n+1, 0);
	c2.resize(n+1, 0);
	t2.resize(n+1, 0);
	at.resize(n+1, 0);
	ta.resize(n+1, 0);
	ca.resize(n+1, 0);
	ac.resize(n+1, 0);
	tc.resize(n+1, 0);
	ct.resize(n+1, 0);
	for (int i=0; i<n; ++i){
		a1[i+1] = a1[i];
		c1[i+1] = c1[i];
		t1[i+1] = t1[i];
		a2[i+1] = a2[i];
		c2[i+1] = c2[i];
		t2[i+1] = t2[i];
		at[i+1] = at[i];
		ta[i+1] = ta[i];
		ac[i+1] = ac[i];
		ca[i+1] = ca[i];
		tc[i+1] = tc[i];
		ct[i+1] = ct[i];
		if (a[i]==b[i]){
			continue;
		}
		if (a[i]=='T' && b[i]=='C'){
			++tc[i+1];
			++t1[i+1];
			++c2[i+1];
		}
		else if (a[i]=='T' && b[i]=='A'){
			++ta[i+1];
			++t1[i+1];
			++a2[i+1];
		}
		else if (a[i]=='C' && b[i]=='T'){
			++ct[i+1];
			++c1[i+1];
			++t2[i+1];
		}
		else if (a[i]=='C' && b[i]=='A'){
			++ca[i+1];
			++c1[i+1];
			++a2[i+1];
		}
		else if (a[i]=='A' && b[i]=='C'){
			++ac[i+1];
			++a1[i+1];
			++c2[i+1];
		}
		else if (a[i]=='A' && b[i]=='T'){
			++at[i+1];
			++a1[i+1];
			++t2[i+1];
		}
	}
}

int get_distance(int x, int y) {
	int TC = tc[y+1]-tc[x], CT=ct[y+1]-ct[x], TA=ta[y+1]-ta[x], AT=at[y+1]-at[x], AC=ac[y+1]-ac[x], CA=ca[y+1]-ca[x];
	int A1 = a1[y+1]-a1[x], A2 = a2[y+1]-a2[x], T1=t1[y+1]-t1[x], T2=t2[y+1]-t2[x], C1=c1[y+1]-c1[x], C2=c2[y+1]-c2[x];
	if (A1!=A2 || T1!=T2 || C1!=C2){
		return -1;
	}
	int val = abs(TC-CT)+abs(TA-AT)+abs(AC-CA);
	val*=2;
	val/=3;
	val+=min(TC, CT)+min(TA, AT)+min(AC, CA);
	return val;
}
#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...