Submission #1185340

#TimeUsernameProblemLanguageResultExecution timeMemory
1185340boclobanchatMutating DNA (IOI21_dna)C++20
35 / 100
21 ms4932 KiB
#include"dna.h"
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
int pref[MAXN][6];
void init(string a,string b)
{
	int n=a.length();
	a=' '+a,b=' '+b;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<6;j++) pref[i][j]+=pref[i-1][j];
		if(a[i]=='A'&&b[i]=='T') pref[i][0]++;
		if(a[i]=='T'&&b[i]=='A') pref[i][3]++;
		if(a[i]=='T'&&b[i]=='C') pref[i][1]++;
		if(a[i]=='C'&&b[i]=='T') pref[i][4]++;
		if(a[i]=='C'&&b[i]=='A') pref[i][2]++;
		if(a[i]=='A'&&b[i]=='C') pref[i][5]++;
	}
}
int get_distance(int x,int y)
{
	x++,y++;
	int a0=pref[y][0]-pref[x-1][0];
	int a1=pref[y][1]-pref[x-1][1];
	int a2=pref[y][2]-pref[x-1][2];
	int a3=pref[y][3]-pref[x-1][3];
	int a4=pref[y][4]-pref[x-1][4];
	int a5=pref[y][5]-pref[x-1][5];
	int u=min(a0,a3),v=min(a1,a4),w=min(a2,a5);
	int ans=u+v+w;
	a0-=u,a3-=u,a1-=v,a4-=v,a2-=w,a5-=w;
	if(max(a0,a3)==max(a1,a4)&&max(a0,a3)==max(a2,a5)) return ans+max(a0,a3)*2;
	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...