Submission #783513

#TimeUsernameProblemLanguageResultExecution timeMemory
783513Sir_Ahmed_ImranMutating DNA (IOI21_dna)C++17
100 / 100
35 ms7404 KiB
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100001
int aA[MAXN];
int aC[MAXN];
int aT[MAXN];
int bA[MAXN];
int bC[MAXN];
int bT[MAXN];
int at[MAXN];
int ac[MAXN];
int ta[MAXN];
int tc[MAXN];
int ca[MAXN];
int ct[MAXN];
void init(std::string a, std::string b) {
	at[0]=0;
	ac[0]=0;
	ta[0]=0;
	tc[0]=0;
	ca[0]=0;
	ct[0]=0;
	aA[0]=0;
	aC[0]=0;
	aT[0]=0;
	bA[0]=0;
	bC[0]=0;
	bT[0]=0;
	int n=a.size();
	for(int i=0;i<n;i++){
		at[i+1]=at[i];
		ac[i+1]=ac[i];
		ta[i+1]=ta[i];
		tc[i+1]=tc[i];
		ca[i+1]=ca[i];
		ct[i+1]=ct[i];
		aA[i+1]=aA[i]+(a[i]=='A');
		aT[i+1]=aT[i]+(a[i]=='T');
		aC[i+1]=aC[i]+(a[i]=='C');
		bA[i+1]=bA[i]+(b[i]=='A');
		bT[i+1]=bT[i]+(b[i]=='T');
		bC[i+1]=bC[i]+(b[i]=='C');
		at[i+1]+=(a[i]=='A' && b[i]=='T');
		ac[i+1]+=(a[i]=='A' && b[i]=='C');
		ta[i+1]+=(a[i]=='T' && b[i]=='A');
		tc[i+1]+=(a[i]=='T' && b[i]=='C');
		ca[i+1]+=(a[i]=='C' && b[i]=='A');
		ct[i+1]+=(a[i]=='C' && b[i]=='T');
	}
}
int get_distance(int y, int x) {
	int Aa,At,Ac,Ba,Bt,Bc,a,b,n,m,o,p,q,r;
	o=0;
	a=at[x+1]-at[y];
	n=ac[x+1]-ac[y];
	b=ta[x+1]-ta[y];
	p=tc[x+1]-tc[y];
	m=ca[x+1]-ca[y];
	q=ct[x+1]-ct[y];
	Aa=aA[x+1]-aA[y];
	At=aT[x+1]-aT[y];
	Ac=aC[x+1]-aC[y];
	Ba=bA[x+1]-bA[y];
	Bt=bT[x+1]-bT[y];
	Bc=bC[x+1]-bC[y];
	if(Aa!=Ba || At!=Bt || Ac!=Bc)
		return -1;
	r=min(a,b);
	a-=r;
	b-=r;
	o+=r;
	r=min(n,m);
	n-=r;
	m-=r;
	o+=r;
	r=min(p,q);
	p-=r;
	q-=r;
	o+=r;
	return o+max(a,b)*2;
}
#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...