Submission #600370

#TimeUsernameProblemLanguageResultExecution timeMemory
600370OrazBMutating DNA (IOI21_dna)C++17
71 / 100
1593 ms58640 KiB
#include <bits/stdc++.h>
#include "dna.h"
#define N 100005
#define wr cout << "Continue debugging\n";
#define ll long long int
#define pii pair <string, int>
#define pb push_back
#define ff first
#define ss second
using namespace std;

int ans;
map <pii, int> pr;
map <string, int> m;
vector <string> v = {"AT", "TA", "AC", "CA", "CT", "TC"};

void calc(){
	for (auto s : v){
		string c = ""; 
		c += s[1]; 
		c += s[0];
		int mn = min(m[s], m[c]);
		ans += mn;
		m[s] -= mn;
		m[c] -= mn; 
	}
}
void init(string a, string b){
	int n = a.size();
	a = ' ' + a;
	b = ' ' + b;
	for (int i = 1; i <= n; i++){
		if (a[i] != b[i]){
			string s = "";
			s += a[i]; 
			s += b[i];	
			pr[{s, i}] = 1;
		} 
	}
	for (int i = 2; i <= n; i++){
		for (auto s : v) pr[{s, i}] += pr[{s, i - 1}];
	}
}
int get_distance(int l, int r){
	for (auto s : v) m[s] = 0;
	l++; r++; ans = 0;
	for (auto s : v) m[s] = pr[{s, r}] - pr[{s, l - 1}]; 
	calc();
	for (auto s : v){
		string c = "", t1 = "";
		c += s[1];
		if ('A' != s[0] and 'A' != s[1]) c += 'A';
		else if ('T' != s[0] and 'T' != s[1]) c += 'T';
		else c += 'C';
		t1 += s[0];
		t1 += c[1];
		int mn = min(m[s], m[c]);
		ans += mn;
		m[s] -= mn;
		m[c] -= mn;
		m[t1] += mn;
	}
	calc();
	for (auto i : v) if (m[i]) return -1;
	return ans;
}
// int main ()
// {
// 	ios::sync_with_stdio(false);
// 	cin.tie(0);
// 	int n1, q1;
// 	string a, b;
// 	cin >> n1 >> q1 >> a >> b;
// 	init(a, b);
// 	while(q1--){
// 		int x, y;
// 		cin >> x >> y;	
// 		cout << get_distance(x, y);
// 	}
// }	
#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...