#include <bits/stdc++.h>
#include "dna.h"
using namespace std;
const int N = 1e5 + 10;
int dp[N][3][3];
int diff[N][3];
// A, T, C
// 1, 2, 3
int dna_to_int(char a) {
  if (a == 'A') return 0;
  else if (a == 'T') return 1;
  else if (a == 'C') return 2;
}
int n;
void init(string a, string b) {
  a = '#' + a;
  b = '#' + b;
  n = a.size();
  for (int i = 1; i <= a.length(); i++) {
    int f = dna_to_int(a[i]),
        s = dna_to_int(b[i]);
    for (int x=0; x<3; x++) for (int y=0; y<3; y++) dp[i][x][y] = dp[i-1][x][y];
    for (int x=0; x<3; x++) diff[i][x] = diff[i-1][x];
    dp[i][f][s]++;
    diff[i][f]++;
    diff[i][s]--;
  }
}
int get_distance(int x, int y) {
  x++; y++;
  if (diff[y][0] - diff[x-1][0] != 0) return -1;
  if (diff[y][1] - diff[x-1][1] != 0) return -1;
  if (diff[y][2] - diff[x-1][2] != 0) return -1;
  int res = 0;
  int trans[3][3] = {{0}};
  for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++)
      trans[i][j] = dp[y][i][j] - dp[x-1][i][j];
  int t;
  // A - T && T - A
  t = min(trans[0][1], trans[1][0]);
  trans[0][1] -= t;
  trans[1][0] -= t;
  res += t;
  // A - C && C - A
  t = min(trans[0][2], trans[2][0]);
  trans[2][0] -= t;
  trans[0][2] -= t;
  res += t;
  // C - T && T - C
  t = min(trans[1][2], trans[2][1]);
  trans[2][1] -= t;
  trans[1][2] -= t;
  res += t;
  res += 2 * (trans[1][2] + trans[2][1]);
  return res;
}
컴파일 시 표준 에러 (stderr) 메시지
dna.cpp: In function 'int dna_to_int(char)':
dna.cpp:17:1: warning: control reaches end of non-void function [-Wreturn-type]
   17 | }
      | ^| # | 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... |