Submission #1216119

#TimeUsernameProblemLanguageResultExecution timeMemory
1216119thelegendary08Mutating DNA (IOI21_dna)C++17
100 / 100
89 ms9032 KiB
#include "dna.h"
#include<bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define vi vector<int>
#define f0r(i,n) for(int i = 0; i<n; i++)
#define FOR(i, k, n) for(int i = k; i<n; i++)
#define pii pair<int,int>
#define vvi vector<vector<int>>
#define vb vector<bool>
#define vpii vector<pair<int,int>>
#define vout(v) for(auto u : v)cout<<u<<' '; cout<<endl;
#define dout(x) cout<<x<<' '<<#x<<endl;
#define dout2(x,y) cout<<x<<' '<<#x<<' '<<y<<' '<<#y<<endl;
using namespace std;
vvi ps;
int n;
vi a; vi b;
void init(std::string A, std::string B) {
	n = A.size();
	a.resize(n); b.resize(n);
	f0r(i,n){
		if(A[i] == 'A')a[i] = 0;
		else if(A[i] == 'C')a[i] = 1;
		else a[i] = 2;
		
		if(B[i] == 'A')b[i] = 0;
		else if(B[i] == 'C')b[i] = 1;
		else b[i] = 2;
	}
	ps.resize(n + 1);
	f0r(i,n+1)ps[i].resize(6);
	
	FOR(i, 1, n+1){
		ps[i][0] = ps[i-1][0] + (a[i-1] == 0 && b[i-1] == 1);
		ps[i][1] = ps[i-1][1] + (a[i-1] == 1 && b[i-1] == 0);
		ps[i][2] = ps[i-1][2] + (a[i-1] == 0 && b[i-1] == 2);
		ps[i][3] = ps[i-1][3] + (a[i-1] == 2 && b[i-1] == 0);
		ps[i][4] = ps[i-1][4] + (a[i-1] == 1 && b[i-1] == 2);
		ps[i][5] = ps[i-1][5] + (a[i-1] == 2 && b[i-1] == 1);
	}
	/*
	f0r(i,6){
		f0r(j, n+1)cout<<ps[j][i]<<' ';
		cout<<'\n';
	}
	*/
}

int get_distance(int x, int y) {
	vi v(6);
	f0r(i,6){
		v[i] = ps[y+1][i] - ps[x][i];
	}
	// vout(v);
	if(v[0] + v[5] != v[1] + v[4])return -1;
	if(v[1] + v[3] != v[0] + v[2])return -1;
	if(v[2] + v[4] != v[3] + v[5])return -1;
	return min(v[0], v[1]) + min(v[2], v[3]) + min(v[4], v[5]) + 2 * (max(v[0],v[1]) - min(v[0],v[1]));
}
#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...