Submission #1210476

#TimeUsernameProblemLanguageResultExecution timeMemory
1210476olyamonkoMutating DNA (IOI21_dna)C++20
100 / 100
35 ms8020 KiB
#include "dna.h"
using namespace std;
#include <bits/stdc++.h>
#define vt vector
vt<vt<int>> pref(1e5+7, vt<int>(6, 0));
void init(std::string a, std::string b) {
	int n=a.size();
	for(int i=1; i<=n; i++){
		vt<char> p = {a[i-1], b[i-1]};
		pref[i]=pref[i-1];
		vt<char> x = {'A', 'T'};
		if(p==x){
			pref[i][5]++;
		}
		x = {'A', 'C'};
		if(p==x){
			pref[i][0]++;
		}
		x={'T', 'A'};
		if(p==x){
			pref[i][4]++;
		}
		x={'C', 'T'};
		if(p==x){
			pref[i][3]++;
		}
		x={'T', 'C'};
		if(p==x){
			pref[i][2]++;
		}
		x={'C', 'A'};
		if(p==x){
			pref[i][1]++;
		}
	}
}

int get_distance(int x, int y) {
	vt<int> p(6);
	for(int i=0; i<6; i++){
		p[i]=pref[y+1][i]-pref[x][i];
	}
	int ans=0;
	for(int i=0; i<3; i++){
		int u = min(p[i*2], p[i*2+1]);
		p[i*2]-=u; p[i*2+1]-=u;
		ans+=u;
		//cout<<u<<"\n"; cout<<p[i*2]<<" "<<p[i*2+1]<<"\n";
	}
	int u = min({p[0], p[3], p[4]});
	p[0]-=u; p[3]-=u; p[4]-=u;
	ans+=u*2;
	//cout<<"||||||||||||||||\n";
	u = min({p[1], p[2], p[5]});
	p[1]-=u; p[2]-=u; p[5]-=u;
	ans+=u*2;
	if((p[0] || p[1] || p[2]|| p[3] || p[4] ||p[5])) return -1;
	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...