# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1057439 | Trent | DNA 돌연변이 (IOI21_dna) | C++17 | 44 ms | 7776 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "dna.h"
#include "bits/stdc++.h"
using namespace std;
#define forR(i, x) for(int i = 0; i < (x); ++i)
#define REP(i, a, b) for(int i = (a); i < (b); ++i)
typedef long long ll;
typedef vector<int> vi;
const int MN = 1e5 + 10;
string a, b;
int psa[MN][3][3];
int id(char v) {
return v == 'A' ? 0 : v == 'C' ? 1 : 2;
}
void init(std::string a, std::string b) {
::a = a;
::b = b;
forR(i, a.size()) {
psa[i][id(a[i])][id(b[i])]++;
}
REP(i, 1, a.size()) forR(j, 3) forR(k, 3) psa[i][j][k] += psa[i-1][j][k];
}
int get_distance(int x, int y) {
vector<vi> cnt(3, vi(3, 0));
forR(i, 3) forR(j, 3) cnt[i][j] = psa[y][i][j] - (x == 0 ? 0 : psa[x-1][i][j]);
int ab=min(cnt[0][1], cnt[1][0]), ac=min(cnt[0][2], cnt[2][0]), bc=min(cnt[1][2], cnt[2][1]);
cnt[0][1]-=ab, cnt[1][0]-=ab;
cnt[0][2]-=ac, cnt[2][0]-=ac;
cnt[1][2]-=bc, cnt[2][1]-=bc;
int ret = -1;
if(cnt[0][1] == cnt[2][0] && cnt[2][0] == cnt[1][2] && cnt[1][0] + cnt[2][1] + cnt[0][2] == 0) ret = ab + ac + bc + 2 * cnt[0][1];
else if(cnt[1][0] == cnt[2][1] && cnt[2][1] == cnt[0][2] && cnt[0][1] + cnt[2][0] + cnt[1][2] == 0) ret = ab + ac + bc + 2 * cnt[1][0];
return ret;
}
컴파일 시 표준 에러 (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... |