Submission #1197046

#TimeUsernameProblemLanguageResultExecution timeMemory
1197046YassirSalamaDNA 돌연변이 (IOI21_dna)C++17
100 / 100
25 ms6152 KiB
#include "dna.h"
#include<bits/stdc++.h>
using namespace std;const int maxn = 1e5+100;int pref[maxn][3][3];int g(char c){if(c=='A')return 0;else if(c=='T')return 1;else return 2;}
void init(std::string a, std::string b) {
for(int i = 0;i<a.length();i++){if(i) for(int j = 0;j<3;j++){for(int k  =0;k<3;k++){pref[i][j][k] = pref[i-1][j][k];}} pref[i][g(a[i])][g(b[i])]++;}
}
int get_distance(int x, int y) {
	int a = 0;int b = 1e9;
	int m[3][3];
	for(int i = 0;i<3;i++){
		for(int j =  0;j<3;j++){
			m[i][j] = pref[y][i][j]-(x?pref[x-1][i][j]:0);
		}
	}
	if(m[0][1]+m[0][2]!=m[1][0]+m[2][0]) return -1;
	if(m[1][0]+m[1][2]!=m[0][1]+m[2][1]) return -1;
	for(int i  =0;i<3;i++){
	}
	for(int i = 0;i<3;i++){
		for(int j =i+1;j<3;j++){
			int mm = min(m[i][j],m[j][i]);
			m[i][j]-=mm,
			m[j][i]-=mm,
			a+=mm;
		}
	}
	for(int i  =0;i<3;i++){
		for(int j  =i+1;j<3;j++){
			b = min(b,max(m[i][j],m[j][i]));
		}
	}
	// cout<<" ! "<<a<<" "<<b<<endl;
	return 2*b+a;
}
#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...