제출 #1178790

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

#define fi first
#define se second

const int mxN = 2e5+10;

map<char,int> mp;
int n,same[mxN],prefA[mxN][2],prefB[mxN][2];
string A,B;

void init(string a,string b){
	A=a,B=b;
	n=a.size();
	same[0]=(a[0]==b[0]);
	mp['A']=0,mp['T']=1;
	for(int i=1;i<n;++i){
		same[i]=same[i-1]+(a[i]==b[i]);
	}
	for(int i=0;i<n;++i){
		prefA[i][mp[A[i]]]=1;
		prefB[i][mp[B[i]]]=1;
		if(i>0){
			prefA[i][0]+=prefA[i-1][0];
			prefA[i][1]+=prefA[i-1][1];
			prefB[i][0]+=prefB[i-1][0];
			prefB[i][1]+=prefB[i-1][1];
		}
	}
}

bool ok(int l,int r){
	int prefaA=(l==0)?0:prefA[l][0];
	int prefaT=(l==0)?0:prefA[l][1];
	int act_aA=prefA[r][0]-prefaA;
	int act_aT=prefA[r][1]-prefaT;


	int prefbA=(l==0)?0:prefB[l][0];
	int prefbT=(l==0)?0:prefB[l][1];
	int act_bA=prefB[r][0]-prefbA;
	int act_bT=prefB[r][1]-prefbT;

	if(act_aA!=act_bA||act_aT!=act_bT) return 0;
	return 1;
}

int qry(int l,int r){
	if(l==0) return same[r];
	return same[r]-same[l-1];
}

int get_distance(int l,int r){
	if(qry(l,r)==(r-l+1)) return 0;
	if(!ok(l,r)) return -1;
	return (r-l+1-qry(l,r))/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...