Submission #1132465

#TimeUsernameProblemLanguageResultExecution timeMemory
1132465lopkusDNA 돌연변이 (IOI21_dna)C++20
100 / 100
70 ms33096 KiB
#include "dna.h"
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif

int value(char c) {
  if (c == 'A') {
    return 0;
  }
  if (c == 'C') {
    return 1;
  }
  if (c == 'T') {
    return 2;
  }
}

vector<vector<int>> pa, pb;
vector<vector<vector<int>>> diff;

void init(string a, string b) {
  a = '$' + a; b = '$' + b;
  pa.resize(a.length() + 1);
  pb.resize(b.length() + 1);
  for (int i = 0; i <= a.length(); i++) {
    pa[i].resize(3);
  }
  for (int i = 0; i <= b.length(); i++) {
    pb[i].resize(3);
  }
  for (int i = 1; i <= a.length(); i++) {
    for (int j = 0; j < 3; j++) {
      pa[i][j] = pa[i - 1][j];
    }
    pa[i][value(a[i])]++;
  }
  for (int i = 1; i <= b.length(); i++) {
    for (int j = 0; j < 3; j++) {
      pb[i][j] = pb[i - 1][j];
    }
    pb[i][value(b[i])]++;
  }
  diff.resize(a.length() + 1);
  for (int i = 0; i <= a.length(); i++) {
    diff[i].resize(3);
    for (int j = 0; j < 3; j++) {
      diff[i][j].resize(3);
    }
  }
  for (int i = 1; i <= a.length(); i++) {
    for (int j = 0; j < 3; j++) {
      for (int k = 0; k < 3; k++) {
        diff[i][j][k] = diff[i - 1][j][k];
      }
    }
    diff[i][value(a[i])][value(b[i])]++;
  }
}

int get_distance(int x, int y) {
  x++; y++;
  for (int i = 0; i < 3; i++) {
    if (pa[y][i] - pa[x - 1][i] != pb[y][i] - pb[x - 1][i]) {
      return -1;
    }
  }
  int ans = 0, sum = 0;
  for (int i = 0; i < 3; i++) {
    for (int j = i + 1; j < 3; j++) {
      ans += min(diff[y][i][j] - diff[x - 1][i][j], diff[y][j][i] - diff[x - 1][j][i]);
      sum += abs((diff[y][i][j] - diff[x - 1][i][j]) - (diff[y][j][i] - diff[x - 1][j][i]));
    }
  }
  ans += 2 * sum / 3;
  return ans;
} 

Compilation message (stderr)

dna.cpp: In function 'int value(char)':
dna.cpp:22:1: warning: control reaches end of non-void function [-Wreturn-type]
   22 | }
      | ^
#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...