제출 #1155797

#제출 시각아이디문제언어결과실행 시간메모리
1155797an22inkleDNA 돌연변이 (IOI21_dna)C++20
100 / 100
44 ms8960 KiB
#include "dna.h" #include<bits/stdc++.h> using namespace std; using ll = long long; using paira = array<int, 2>; int n = 1; vector<int> same(1); vector<vector<int>> counta(3, vector<int>(1)); vector<vector<vector<int>>> ma(3, vector<vector<int>>(3, vector<int>(n))); auto countb = counta; void init(string a, string b) { n = a.size(); same.resize(n+1); for (int i = 0; i < 3; i++) { counta[i].resize(n+1); countb[i].resize(n+1); } for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { ma[i][j].resize(n+1); } } for (int i = 0; i < n; i++) { int ai = (a[i] == 'A' ? 0 : (a[i] == 'T' ? 1 : 2)); int bi = (b[i] == 'A' ? 0 : (b[i] == 'T' ? 1 : 2)); for (int j = 0; j < 3; j++) { counta[j][i + 1] = counta[j][i]; countb[j][ i + 1] = countb[j][i]; } counta[ai][i+1]++; countb[bi][i+1]++; for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { ma[j][k][i+1] = ma[j][k][i]; } } ma[ai][bi][i+1]++; same[i + 1] = (i == 0 ? 0 : same[i]) + (ai == bi); } for (int i = 0; 0 && i < (n + 1); i++) { cout << countb[0][i] << ' '; cout << countb[1][i] << ' ' ; cout << countb[2][i] << '\n'; } } int get_distance(int x, int y) { for (int i = 0; i < 3 ; i++) { // cout << i << ' ' << counta[i][y+1] - counta[i][x] << ' ' << countb[i][y+1] - countb[i][x] << '\n'; if (counta[i][y+1] - counta[i][x] != countb[i][y+1] - countb[i][x]) { return -1; } } int ans = 0; for (int i = 0; i < 3; i++) { for (int j = i + 1; j < 3; j++) { ans += min(ma[i][j][y + 1] - ma[i][j][x], ma[j][i][y + 1] - ma[j][i][x]); } }; int a = (ma[0][1][y + 1] - ma[0][1][x]), b= ( ma[1][0][y + 1] - ma[1][0][x]); ans += 2*(max(a, b) - min(a ,b)); return ans; } /* constraints n = 1e5 q = 1e5 at most 3 different q*log(n) or q solution allowed same[n] = number of "matching" indices for x and y until n then If two strings who are derranged permutations of each other then their edit distance is for even n n/2 for odd n (n-1)/2 + 1 = (n-1+2)/2 = (n+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...