Submission #784755

#TimeUsernameProblemLanguageResultExecution timeMemory
784755mindiyakMutating DNA (IOI21_dna)C++17
22 / 100
1590 ms6792 KiB
#include "dna.h"
#include <vector>
#include <algorithm>
#include <set>
#include <bits/stdc++.h>
#define pb push_back

using namespace std;

int chartoint(char a){
	if(a == 'A'){
		return 0;
	}if(a == 'C'){
		return 1;
	}
	return 2;
}


vector<vector<int>> A_counter,B_counter;
int N;
vector<int> A;
vector<int> B;

void init(string a, string b) {
	vector<int>arr;

	for(int i=0;i<3;i++){
		A_counter.pb(arr);
		B_counter.pb(arr);
	}
	N = a.size();

	vector<int> _a_cont = {0,0,0};
	vector<int> _b_cont = {0,0,0};

	for(int i=0;i<N;i++){
		A.pb(chartoint(a[i]));
		B.pb(chartoint(b[i]));
		_a_cont[chartoint(a[i])]++;
		_b_cont[chartoint(b[i])]++;

		for(int j=0;j<3;j++){
			A_counter[j].pb(_a_cont[j]);
			B_counter[j].pb(_b_cont[j]);
		}
	}

	// cout << "A " << endl;
	// for(int i=0;i<N;i++){
	// 	cout << i << " -> ";
	// 	for(int j=0;j<3;j++){
	// 		cout << A_counter[j][i] << " ";
	// 	}cout << endl;
	// }

	// cout << "B " << endl;
	// for(int i=0;i<N;i++){
	// 	cout << i << " -> ";
	// 	for(int j=0;j<3;j++){
	// 		cout << B_counter[j][i] << " ";
	// 	}cout << endl;
	// }
	// cout << endl;
}

int makeset(int a,int b){
	return (a*10 + b);
}

int get_distance(int x, int y) {
	for(int j=0;j<3;j++){
		// cout << j << " " << (A_counter[j][y]-A_counter[j][x-1]) << " " << (B_counter[j][y]-B_counter[j][x-1]) << endl;
		if((A_counter[j][y]-A_counter[j][x-1]) != (B_counter[j][y]-B_counter[j][x-1])){
			return -1;
		}
	}

	int ans = 0;
	vector<int> prev(25,0);

	for(int i=x;i<=y;i++){
		if(A[i] == B[i]){
			continue;
		}
		if(prev[makeset(A[i],B[i])] > 0){
			prev[makeset(A[i],B[i])]--;
			continue;
		}
		prev[makeset(B[i],A[i])]++;
		ans += 1;
	}
	// if(ans > 1){
	// 	ans --;
	// }

	return ans;
}
#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...