Submission #1287481

#TimeUsernameProblemLanguageResultExecution timeMemory
1287481putthi_usMutating DNA (IOI21_dna)C++20
100 / 100
21 ms4848 KiB
#include "dna.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> at,ta,tc,ct,ca,ac;
void init(std::string a, std::string b) {
	int n=a.length();
	at.resize(n+1);
	ta.resize(n+1);
	tc.resize(n+1);
	ct.resize(n+1);
	ca.resize(n+1);
	ac.resize(n+1);
	at[0]=ta[0]=tc[0]=ct[0]=ca[0]=ac[0]=0;
	for(int i=0;i<n;i++){
		at[i+1]=at[i];
		ta[i+1]=ta[i];
		tc[i+1]=tc[i];
		ct[i+1]=ct[i];
		ca[i+1]=ca[i];
		ac[i+1]=ac[i];
		if(a[i]=='A'&&b[i]=='T'){
			at[i+1]++;
		}else if(a[i]=='T'&&b[i]=='A'){
			ta[i+1]++;
		}else if(a[i]=='T'&&b[i]=='C'){
			tc[i+1]++;
		}else if(a[i]=='C'&&b[i]=='T'){
			ct[i+1]++;
		}else if(a[i]=='C'&&b[i]=='A'){
			ca[i+1]++;
		}else if(a[i]=='A'&&b[i]=='C'){
			ac[i+1]++;
		}
	}

}

int get_distance(int x, int y) {
	y++;
	int Aa=at[y]-at[x]+ac[y]-ac[x];
	int Ta=ta[y]-ta[x]+tc[y]-tc[x];
	int Ca=ca[y]-ca[x]+ct[y]-ct[x];
	int Ab=ta[y]-ta[x]+ca[y]-ca[x];
	int Tb=at[y]-at[x]+ct[y]-ct[x];
	int Cb=ac[y]-ac[x]+tc[y]-tc[x];
	if(Aa==Ab&&Ca==Cb&&Ta==Tb){
		int AT=at[y]-at[x];
		int AC=ac[y]-ac[x];
		int TA=ta[y]-ta[x];
		int TC=tc[y]-tc[x];
		int CA=ca[y]-ca[x];
		int CT=ct[y]-ct[x];
		int m1=min(AT,TA);
		int m2=min(AC,CA);
		int m3=min(TC,CT);
		int rest=(abs(AT-TA)+abs(AC-CA)+abs(CT-TC));
		
		return m1+m2+m3+rest/3*2;

	}
	return -1;

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