제출 #978235

#제출 시각아이디문제언어결과실행 시간메모리
978235tamir1Mutating DNA (IOI21_dna)C++17
100 / 100
41 ms8652 KiB
#include "dna.h"
#include<bits/stdc++.h>
using namespace std;
string t="#",s="#";
int n,i,A1[100005],C1[100005],T1[100005],A2[100005],C2[100005],T2[100005],AC[100005],CA[100005],AT[100005],TA[100005],CT[100005],TC[100005];
void init(std::string a, std::string b) {
	n=a.size();
	s+=a;
	t+=b;
	for(i=1;i<=n;i++){
		A1[i]=A1[i-1]+(s[i]=='A');
		C1[i]=C1[i-1]+(s[i]=='C');
		T1[i]=T1[i-1]+(s[i]=='T');
		A2[i]=A2[i-1]+(t[i]=='A');
		C2[i]=C2[i-1]+(t[i]=='C');
		T2[i]=T2[i-1]+(t[i]=='T');
		AC[i]=AC[i-1]+(s[i]=='A' && t[i]=='C');
		CA[i]=CA[i-1]+(s[i]=='C' && t[i]=='A');
		AT[i]=AT[i-1]+(s[i]=='A' && t[i]=='T');
		TA[i]=TA[i-1]+(s[i]=='T' && t[i]=='A');
		CT[i]=CT[i-1]+(s[i]=='C' && t[i]=='T');
		TC[i]=TC[i-1]+(s[i]=='T' && t[i]=='C');
	}
}
int a1,a2,c1,c2,t1,t2,ac,ca,at,ta,ct,tc,ans;
int get_distance(int x, int y) {
	ans=0;
	y++;
	a1=A1[y]-A1[x];
	a2=A2[y]-A2[x];
	c1=C1[y]-C1[x];
	c2=C2[y]-C2[x];
	t1=T1[y]-T1[x];
	t2=T2[y]-T2[x];
	
	ac=AC[y]-AC[x];
	at=AT[y]-AT[x];
	ca=CA[y]-CA[x];
	ct=CT[y]-CT[x];
	ta=TA[y]-TA[x];
	tc=TC[y]-TC[x];	
	if(a1!=a2 || c1!=c2 || t1!=t2) return -1;
	if(ac > ca) {ans+=ca,ac-=ca,ca=0;}
	else {ans+=ac,ca-=ac,ac=0;}
	if(at > ta) {ans+=ta,at-=ta,ta=0;}
	else {ans+=at,ta-=at,at=0;}
	if(ct > tc) {ans+=tc,ct-=tc,tc=0;}
	else {ans+=ct,tc-=ct,ct=0;}
	//cout << ac << " " << ct << " " << ta << "\n";
	//cout << ca << " " << at << " " << tc << "\n";
	return ans+ac*2+ca*2;
}
#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...