Submission #593483

#TimeUsernameProblemLanguageResultExecution timeMemory
593483PetyDNA 돌연변이 (IOI21_dna)C++17
71 / 100
1536 ms2956 KiB
#include <bits/stdc++.h>
#define ll long long

using namespace std;

const int INF = 1e9;
const int MOD = 1e9 + 7;

int n, p1[100002], p2[100002];

void init (string a, string b) {
  n = a.size();
  map<char, int>mp;
  mp['A'] = 1;
  mp['C'] = 2;
  mp['T'] = 3;
  for (int i = 1; i <= n; i++) {
    p1[i] = mp[a[i - 1]];
    p2[i] = mp[b[i - 1]];
  }
}

int get_distance (int x, int y) {
  x++;y++;
  int cnt[4][4], lol[4];
  memset(cnt, 0, sizeof(cnt));
  memset(lol, 0, sizeof(lol));

  for (int i = x; i <= y; i++) {
    lol[p1[i]]--;
    lol[p2[i]]++;
    cnt[p1[i]][p2[i]]++;
  }
  if (lol[1] != 0 || lol[2] != 0 || lol[3] != 0)
    return -1;
  int cycles = 0;
  int sz = y - x + 1;
  cycles += cnt[1][1];
  cycles += cnt[2][2];
  cycles += cnt[3][3];
  sz -= cycles;
  cycles += min(cnt[1][2], cnt[2][1]);
  sz -= 2 * min(cnt[1][2], cnt[2][1]);
  cycles += min(cnt[1][3], cnt[3][1]);
  sz -= 2 * min(cnt[1][3], cnt[3][1]);
  cycles += min(cnt[2][3], cnt[3][2]);
  sz -= 2 * min(cnt[2][3], cnt[3][2]);
  cycles += sz / 3;
  return y - x + 1 - cycles;
}


#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...