제출 #1243335

#제출 시각아이디문제언어결과실행 시간메모리
1243335guanexDNA 돌연변이 (IOI21_dna)C++20
35 / 100
19 ms4876 KiB
#include "dna.h"
#include<bits/stdc++.h>

using namespace std;

int AC[100005];
int CA[100005];
int AT[100005];
int TA[100005];
int TC[100005];
int CT[100005];

void init(std::string a, std::string b) {
	AC[0] = 0;
	CA[0] = 0;
	AT[0] = 0;
	TA[0] = 0;
	TC[0] = 0;
	CT[0] = 0; 
	for(int i = 0; i < (int)a.size(); ++i){
		if(i > 0){
			AC[i] = AC[i-1];
			CA[i] = CA[i-1];
			AT[i] = AT[i-1];
			TA[i] = TA[i-1];
			TC[i] = TC[i-1];
			CT[i] = CT[i-1]; 
		}
		if(a[i] == b[i])continue;
		if(a[i] == 'A' && b[i] == 'C'){
			AC[i]++;
		}
		if(a[i] == 'A' && b[i] == 'T'){
			AT[i]++;
		}
		if(a[i] == 'T' && b[i] == 'A'){
			TA[i]++;
		}
		if(a[i] == 'C' && b[i] == 'A'){
			CA[i]++;
		}
		if(a[i] == 'C' && b[i] == 'T'){
			CT[i]++;
		}
		if(a[i] == 'T' && b[i] == 'C'){
			TC[i]++;
		}

	}
}

int get_distance(int x, int y) {
	int ac = AC[y];
	int ca = CA[y];
	int at = AT[y];
	int ta = TA[y];
	int tc = TC[y];
	int ct = CT[y];
	if(x > 0){
		ac -= AC[x-1];
		ca -= CA[x-1];
		at -= AT[x-1];
		ta -= TA[x-1];
		tc -= TC[x-1];
		ct -= CT[x-1];
	}
	int ans = 0;
	if(ac > ca){
		swap(ca, ac);
	}
	if(at > ta){
		swap(at, ta);
	}
	if(tc > ct){
		swap(tc, ct);
	}
	ans += ac;
	ans += at;
	ans += tc;
	ca -= ac;
	ta -= at;
	ct -= tc;
	if(ct == ta && ct == ca){
		ans += 2 * ct;
		return ans;
	}else{
		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...