Submission #1128618

#TimeUsernameProblemLanguageResultExecution timeMemory
1128618Lincito_31Mutating DNA (IOI21_dna)C++20
100 / 100
32 ms6728 KiB
#include "dna.h"
#include <bits/stdc++.h>
using namespace std;
string x,y;
int n;
vector<int> psumTA,psumAT,psumTC,psumCT,psumAC,psumCA,cantiAa,cantiTa,cantiAb,cantiTb;
void init(string a,string b){
	x=a;y=b;
	n=a.size(); 
	psumTA.resize(n+1);
	psumAT.resize(n+1);
	psumCA.resize(n+1);
	psumAC.resize(n+1);
	psumTC.resize(n+1);
	psumCT.resize(n+1);
	cantiAa.resize(n+1);
	cantiTa.resize(n+1);
	cantiTb.resize(n+1);
	cantiAb.resize(n+1);
	for(int i=1;i<=n;i++){
		cantiAa[i]=cantiAa[i-1]+(a[i-1]=='A');
		cantiTa[i]=cantiTa[i-1]+(a[i-1]=='T');
		cantiAb[i]=cantiAb[i-1]+(b[i-1]=='A');
		cantiTb[i]=cantiTb[i-1]+(b[i-1]=='T');
		psumAC[i]=psumAC[i-1];
		psumCA[i]=psumCA[i-1];
		psumTA[i]=psumTA[i-1];
		psumAT[i]=psumAT[i-1];
		psumTC[i]=psumTC[i-1];
		psumCT[i]=psumCT[i-1];
		if(a[i-1]=='A'){
			if(b[i-1]=='T'){
				psumAT[i]++;
			}else if(b[i-1]=='C'){
				psumAC[i]++;
			}
		}else if(a[i-1]=='T'){
			if(b[i-1]=='A'){
				psumTA[i]++;
			}else if(b[i-1]=='C'){
				psumTC[i]++;
			}
		}else{
			if(b[i-1]=='A'){
				psumCA[i]++;
			}else if(b[i-1]=='T'){
				psumCT[i]++;
			}
		}
	}
}

int get_distance(int x, int y){
	if((cantiAa[y+1]-cantiAa[x]==cantiAb[y+1]-cantiAb[x]) && (cantiTa[y+1]-cantiTa[x]==cantiTb[y+1]-cantiTb[x])){
        int AC=psumAC[y+1]-psumAC[x];
		int CA=psumCA[y+1]-psumCA[x];
		int AT=psumAT[y+1]-psumAT[x];
		int TA=psumTA[y+1]-psumTA[x];
		int TC=psumTC[y+1]-psumTC[x];
		int CT=psumCT[y+1]-psumCT[x];
		int con1=min(AC,CA),con2=min(AT,TA),con3=min(TC,CT);
		int res=con1+con2+con3;
		AC-=con1;
		CA-=con1;
		AT-=con2;
		TA-=con2;
		CT-=con3;
		TC-=con3;
		int queda=AC+CA+TA+AT+CT+TC;
		res+=(queda/3)*2;
		return res;
    }else{
        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...