제출 #1189599

#제출 시각아이디문제언어결과실행 시간메모리
1189599North1304DNA 돌연변이 (IOI21_dna)C++20
100 / 100
20 ms5028 KiB
#include <bits/stdc++.h>
#include "dna.h"
using namespace std;
const int N = 1e5 + 1;
int at[N] , ta[N] , ac[N] , ca[N] , tc[N] , ct[N];
void init(string a, string b) {
	int n = a.size();
	a = ' ' + a;
	b = ' ' + b;
	for (int i=1;i<=n;i++) {
		at[i] = at[i-1] + (a[i]=='A' && b[i]=='T');
		ta[i] = ta[i-1] + (a[i]=='T' && b[i]=='A');
		ac[i] = ac[i-1] + (a[i]=='A' && b[i]=='C');
		ca[i] = ca[i-1] + (a[i]=='C' && b[i]=='A');
		tc[i] = tc[i-1] + (a[i]=='T' && b[i]=='C');
		ct[i] = ct[i-1] + (a[i]=='C' && b[i]=='T');
	}
}

int get_distance(int x, int y) {
	x++;
	y++;
	int nowat = at[y] - at[x-1];
	int nowta = ta[y] - ta[x-1];
	int nowac = ac[y] - ac[x-1];
	int nowca = ca[y] - ca[x-1];
	int nowtc = tc[y] - tc[x-1];
	int nowct = ct[y] - ct[x-1];
	int minat = min(nowat, nowta);
	int minac = min(nowac, nowca);
	int mintc = min(nowtc, nowct);
	nowat -= minat;
	nowta -= minat;
	nowac -= minac;
	nowca -= minac;
	nowtc -= mintc;
	nowct -= mintc;
	if (nowat==nowtc && nowtc==nowca && nowct==nowta && nowta==nowac) return minat + minac + mintc + max(nowat, nowta) * 2;
	else return -1;
	return 0;
}
#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...