제출 #623923

#제출 시각아이디문제언어결과실행 시간메모리
623923ACGNDNA 돌연변이 (IOI21_dna)C++17
100 / 100
64 ms7464 KiB
#include<bits/stdc++.h> using namespace std; int cvt(char c) { if (c=='A') return 0; if (c=='C') return 1; return 2; } int srg[3][3][150000]; void init(string a, string b) { int n=a.length(); for (int i=0;i<3;i++) { for (int j=0;j<3;j++) { srg[i][j][0] = 0; } } for (int i=0;i<3;i++) { for (int j=0;j<3;j++) { for (int k=0;k<n;k++) srg[i][j][k+1] = srg[i][j][k] + (i==cvt(a[k]))*(j==cvt(b[k])); } } } int get_distance(int x, int y) { int bs[3][3]; for (int i=0;i<3;i++) { for (int j=0;j<3;j++) { bs[i][j] = srg[i][j][y+1] - srg[i][j][x]; } } int ans = 0; int m; m=min(bs[0][1],bs[1][0]);bs[0][1]-=m;bs[1][0]-=m;ans+=m; m=min(bs[0][2],bs[2][0]);bs[0][2]-=m;bs[2][0]-=m;ans+=m; m=min(bs[2][1],bs[1][2]);bs[2][1]-=m;bs[1][2]-=m;ans+=m; int r = bs[0][1]; if (r!=bs[1][2]) return -1; if (r!=bs[2][0]) return -1; ans+=r*2; int s = bs[0][2]; if (s!=bs[2][1]) return -1; if (s!=bs[1][0]) return -1; ans+=s*2; 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...