Submission #1181440

#TimeUsernameProblemLanguageResultExecution timeMemory
1181440petezaDNA 돌연변이 (IOI21_dna)C++20
100 / 100
23 ms6152 KiB
#include "dna.h"
#include <bits/stdc++.h>
using namespace std;

int n;
int qs[100005][3][3];
int vals[3][3];

int conv(char x) {
	if(x == 'A') return 0;
	if(x == 'T') return 1;
	return 2;
}

void init(std::string a, std::string b) {
	n = a.size();
	for(int i=1;i<=n;i++) {
		for(int j=0;j<3;j++) {
			for(int k=0;k<3;k++) {
				qs[i][j][k] = qs[i-1][j][k];
			}
		}
		qs[i][conv(a[i-1])][conv(b[i-1])]++;
	}
}

int get_distance(int x, int y) {
	y++;
	for(int j=0;j<3;j++) {
		for(int k=0;k<3;k++) vals[j][k] = qs[y][j][k] - qs[x][j][k];
	}
	int v01, v02, v12;
	v01 = min(vals[0][1], vals[1][0]);
	v02 = min(vals[0][2], vals[2][0]);
	v12 = min(vals[1][2], vals[2][1]);
	int ans = v01 + v02 + v12;
	vals[0][1] -= v01; vals[1][0] -= v01;
	vals[0][2] -= v02; vals[2][0] -= v02;
	vals[1][2] -= v12; vals[2][1] -= v12;
	if(vals[0][1] == vals[1][2] && vals[1][2] == vals[2][0] && vals[1][0] == vals[0][2] && vals[0][2] == vals[2][1]) {
		ans += max(vals[0][1], vals[1][0]) * 2;
	} else 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...