Submission #1178786

#TimeUsernameProblemLanguageResultExecution timeMemory
1178786rayan_bdMutating DNA (IOI21_dna)C++20
0 / 100
20 ms4420 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=prefA[l-(l!=0)][0];
	int prefaT=prefA[l-(l!=0)][1];
	int act_aA=prefA[r][0]-prefaA;
	int act_aT=prefA[r][1]-prefaT;


	int prefbA=prefB[l-(l!=0)][0];
	int prefbT=prefB[l-(l!=0)][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...