# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
677101 | hello_there_123 | DNA 돌연변이 (IOI21_dna) | C++17 | 37 ms | 7440 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
string s, t;
int n;
int lol[4][4][200005];
int mat[4][4];
//lol[i][j] -> i wants to turn into j
void init(std::string a, std::string b) {
int n = a.length();
for(int i=0;i<n;i++){
int fir, sec;
if(a[i] == 'A') fir = 0;
if(a[i] == 'T') fir = 1;
if(a[i] == 'C') fir = 2;
if(b[i] == 'A') sec = 0;
if(b[i] == 'T') sec = 1;
if(b[i] == 'C') sec = 2;
for(int j=0;j<3;j++){
for(int k=0;k<3;k++){
if(i!=0) lol[j][k][i] = lol[j][k][i-1];
}
}
if(a[i]==b[i]) continue;
lol[fir][sec][i]++;
}
}
int get_distance(int z, int y) {
int ans = 0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(z>0) mat[i][j] = lol[i][j][y] - lol[i][j][z-1];
else mat[i][j] = lol[i][j][y];
}
}
int x = min(mat[0][1],mat[1][0]);
ans+=x;
mat[0][1]-=x;
mat[1][0]-=x;
x = min(mat[0][2],mat[2][0]);
ans+=x;
mat[0][2]-=x;
mat[2][0]-=x;
x = min(mat[1][2],mat[2][1]);
ans+=x;
mat[1][2]-=x;
mat[2][1]-=x;
if(mat[0][1] + mat[0][2] == mat[1][0] + mat[2][0] && mat[1][0]+mat[1][2] == mat[0][1] + mat[2][1] && mat[2][0]+mat[2][1] == mat[0][2]+mat[1][2]){
ans+=2*(mat[0][1] + mat[0][2]);
return ans;
}
else return -1;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |