Submission #1175259

#TimeUsernameProblemLanguageResultExecution timeMemory
1175259raspyMutating DNA (IOI21_dna)C++20
0 / 100
21 ms4608 KiB
#include "dna.h"
#include <bits/stdc++.h>

using namespace std;

map<string, int> mp;
int n;
int kum[8][100005];

const string dnk[8] = {"AC", "AT", "CA", "CT", "TA", "TC"};
const int LIK = 6;

void init(string a, string b)
{
	for (int i = 0; i < LIK; i++)
		mp[dnk[i]] = i;
	n = a.size();
	for (int i = 1; i <= n; i++)
	{
		string tr(1, a[i-1]);
		tr += b[i-1];
		for (int ix = 0; ix < LIK; ix++)
			kum[ix][i] = kum[ix][i-1];
		kum[mp[tr]][i]++;
	}
}

int tr_dnk[8];

int get_distance(int x, int y)
{
	for (int i = 0; i < LIK; i++)
		tr_dnk[i] = kum[i][y+1]-kum[i][x];
	if (tr_dnk[0] < tr_dnk[2]) swap(tr_dnk[0], tr_dnk[2]);
	if (tr_dnk[1] < tr_dnk[4]) swap(tr_dnk[1], tr_dnk[4]);
	if (tr_dnk[3] < tr_dnk[5]) swap(tr_dnk[3], tr_dnk[5]);
	tr_dnk[0] -= tr_dnk[2]; // ac, ca
	tr_dnk[1] -= tr_dnk[4]; // at, ta
	tr_dnk[3] -= tr_dnk[5]; // ct, tc
	if ((tr_dnk[0]) != (tr_dnk[1]) || (tr_dnk[0]) != (tr_dnk[3]))
		return -1;
	int rez = (tr_dnk[2]) + (tr_dnk[4]) + (tr_dnk[5]);
	rez += tr_dnk[0]*2;
	return rez;
}
#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...