제출 #1324373

#제출 시각아이디문제언어결과실행 시간메모리
1324373kasamchiDNA 돌연변이 (IOI21_dna)C++20
35 / 100
26 ms6112 KiB
#include "dna.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> pre[9];
string ATC = "ATC";

void init(string a, string b) {
	int N = a.size();
	for (int i = 0; i < 9; i++) {
		pre[i] = vector(N + 1, 0);
	}
	for (int i = 1; i <= N; i++) {
		int idx = ATC.find(a[i - 1]) * 3 + ATC.find(b[i - 1]);
		for (int j = 0; j < 9; j++) {
			pre[j][i] = pre[j][i - 1] + (j == idx);
		}
	}
}

int get_distance(int x, int y) {
	x++, y++;

	int arr[9] = {};
	for (int i = 0; i < 9; i++) {
		arr[i] = pre[i][y] - pre[i][x - 1];
	}
	int a[3] = {}, b[3] = {};
	for (int i = 0; i < 9; i++) {
		a[i / 3] += arr[i];
		b[i % 3] += arr[i];
	}
	if (a[0] != b[0] || a[1] != b[1] || a[2] != b[2]) {
		return -1;
	}

	int ret = 0, tmp;
	tmp = min(arr[1], arr[3]);
	arr[1] -= tmp, arr[3] -= tmp, ret += tmp;
	tmp = min(arr[2], arr[6]);
	arr[2] -= tmp, arr[6] -= tmp, ret += tmp;
	tmp = min(arr[5], arr[7]);
	arr[5] -= tmp, arr[7] -= tmp, ret += tmp;
	return ret + arr[1] + arr[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...