Submission #439966

#TimeUsernameProblemLanguageResultExecution timeMemory
439966BT21tataMutating DNA (IOI21_dna)C++17
35 / 100
54 ms5276 KiB
#include "dna.h"
#include "bits/stdc++.h"

using namespace std;

int a[100005][3], b[100005][3], dif[100005];

void init(string A, string B)
{
	for(int i=0; i<(int)A.length(); i++)
	{
		if(A[i]!=B[i]) dif[i+1]=1;
		dif[i+1]+=dif[i];

		if(A[i]=='C') a[i+1][1]=1;
		else if(A[i]=='T') a[i+1][2]=1;
		else a[i+1][0]=1;

		if(B[i]=='C') b[i+1][1]=1;
		else if(B[i]=='T') b[i+1][2]=1;
		else b[i+1][0]=1;

		a[i+1][0]+=a[i][0];
		a[i+1][1]+=a[i][1];
		a[i+1][2]+=a[i][2];

		b[i+1][0]+=b[i][0];
		b[i+1][1]+=b[i][1];
		b[i+1][2]+=b[i][2];
	}
}

int get_distance(int x, int y)
{
	int diff=dif[y+1]-dif[x];
	int cnt1[3]={a[y+1][0]-a[x][0], a[y+1][1]-a[x][1], a[y+1][2]-a[x][2]};
	int cnt2[3]={b[y+1][0]-b[x][0], b[y+1][1]-b[x][1], b[y+1][2]-b[x][2]};
	if(cnt1[0]!=cnt2[0] or cnt1[1]!=cnt2[1] or cnt1[2]!=cnt2[2]) return -1;
	return diff/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...