Submission #1283118

#TimeUsernameProblemLanguageResultExecution timeMemory
1283118Faisal_SaqibMutating DNA (IOI21_dna)C++20
100 / 100
35 ms6128 KiB
#include <string>
#include <iostream>
using namespace std;
const int N=1e5+100;
int pre[3][3][N];
void init(string a,string b)
{
	for(int i=0;i<a.size();i++)
	{
		if(a[i]=='T')
			a[i]='B';
		if(b[i]=='T')
			b[i]='B';
		for(int k=0;k<3;k++)
			for(int j=0;j<3;j++)
				pre[k][j][i+1]=pre[k][j][i];
		pre[a[i]-'A'][b[i]-'A'][i+1]++;
	}
}
int get_distance(int x, int y)
{
	x++;
	y++;
	int _00=pre[0][0][y]-pre[0][0][x-1];//
	int _01=pre[0][1][y]-pre[0][1][x-1];//
	int _02=pre[0][2][y]-pre[0][2][x-1];//
	int _10=pre[1][0][y]-pre[1][0][x-1];//
	int _11=pre[1][1][y]-pre[1][1][x-1];//
	int _12=pre[1][2][y]-pre[1][2][x-1];//
	int _20=pre[2][0][y]-pre[2][0][x-1];//
	int _21=pre[2][1][y]-pre[2][1][x-1];//
	int _22=pre[2][2][y]-pre[2][2][x-1];//
	int mv=0;
	int mn=min(_01,_10);
	_01-=mn;
	_10-=mn;
	mv+=mn;
	mn=min(_02,_20);
	_02-=mn;
	_20-=mn;
	mv+=mn;
	mn=min(_12,_21);
	_12-=mn;
	_21-=mn;
	mv+=mn;
	mn=min(min(_02,_21),_10);
	_02-=mn;
	_21-=mn;
	_10-=mn;
	mv+=(2*mn);
	mn=min(min(_01,_20),_12);
	_01-=mn;
	_20-=mn;
	_12-=mn;
	mv+=(2*mn);
	if((_01+_02+_10+_12+_20+_21)>0)
		return -1;
	return mv;
}
#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...