Submission #1236858

#TimeUsernameProblemLanguageResultExecution timeMemory
1236858colossal_pepeMutating DNA (IOI21_dna)C++17
35 / 100
78 ms33096 KiB
#include "dna.h" #include <bits/stdc++.h> using namespace std; int n; vector<vector<int>> cnt_a, cnt_b; vector<vector<vector<int>>> mut; int id(char c) { if (c == 'A') return 0; else if (c == 'T') return 1; else return 2; } void init(string a, string b) { n = a.size(); cnt_a.resize(n + 1, vector<int>(3, 0)), cnt_b.resize(n + 1, vector<int>(3, 0)); mut.resize(n + 1, vector<vector<int>>(3, vector<int>(3, 0))); for (int i = 1; i <= n; i++) { cnt_a[i][id(a[i - 1])]++, cnt_b[i][id(b[i - 1])]++; mut[i][id(a[i - 1])][id(b[i - 1])]++; for (int j = 0; j < 3; j++) { cnt_a[i][j] += cnt_a[i - 1][j]; cnt_b[i][j] += cnt_b[i - 1][j]; for (int k = 0; k < 3; k++) { mut[i][j][k] += mut[i - 1][j][k]; } } } } int get_distance(int x, int y) { vector<vector<int>> mut_cur(3, vector<int>(3, 0)); for (int i = 0; i < 3; i++) { if (cnt_a[y + 1][i] - cnt_a[x][i] != cnt_b[y + 1][i] - cnt_b[x][i]) return -1; for (int j = 0; j < 3; j++) { mut_cur[i][j] = mut[y + 1][i][j] - mut[x][i][j]; } } return mut_cur[0][1] + mut_cur[0][2] + mut_cur[1][2]; }
#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...