Submission #565165

#TimeUsernameProblemLanguageResultExecution timeMemory
565165teraqqqMutating DNA (IOI21_dna)C++17
100 / 100
64 ms9736 KiB
#include <bits/stdc++.h> #include "dna.h" using namespace std; const int N = 1e5+7; int cnt[3][3][N], cnta[3][N], cntb[3][N]; int id[256]; void init(std::string a, std::string b) { id['A'] = 0; id['C'] = 1; id['T'] = 2; const int n = a.size(); for (int i = 0; i < n; ++i) { const int x = id[(int)a[i]], y = id[(int)b[i]]; for (int p = 0; p < 3; ++p) { cnta[p][i+1] = cnta[p][i]; cntb[p][i+1] = cntb[p][i]; for (int q = 0; q < 3; ++q) cnt[p][q][i+1] = cnt[p][q][i]; } cnt[x][y][i+1]++; cnta[x][i+1]++; cntb[y][i+1]++; } } int get_distance(int x, int y) { ++y; // [x, y) for (int i = 0; i < 3; ++i) { if (cnta[i][y] - cnta[i][x] != cntb[i][y] - cntb[i][x]) return -1; } vector q(3, vector<int>(3)); for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) { q[i][j] = cnt[i][j][y] - cnt[i][j][x]; if (i == j) q[i][j] = 0; } int ans = 0; for (int s = 0; s < 3; ++s) for (int t = 0; t < s; ++t) { int delta = min(q[s][t], q[t][s]); ans += delta; q[s][t] -= delta; q[t][s] -= delta; } int lam = 0; for (auto& u : q) for (int x : u) lam += x; ans += lam / 3 * 2; return ans; }
#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...