Submission #1234746

#TimeUsernameProblemLanguageResultExecution timeMemory
1234746gry3125Mutating DNA (IOI21_dna)C++20
71 / 100
1596 ms7240 KiB
#include "dna.h" #include <bits/stdc++.h> #define ll long long int using namespace std; string a, b; int n; vector<ll> as[3], bs[3]; // [0] = A, [1] = T, [2] = C int get_distance(int x, int y) { for (int i = 0; i < 3; i++) { ll suma = as[i][y], sumb = bs[i][y]; if (x > 0) { suma -= as[i][x-1]; sumb -= bs[i][x-1]; } if (suma != sumb) return -1; } int at[2] = { }, tc[2] = { }, ca[2] = { }; for (int i = x; i <= y; i++) { if (a[i] != b[i]) { if (a[i] == 'A' && b[i] == 'T') at[0]++; if (a[i] == 'T' && b[i] == 'C') tc[0]++; if (a[i] == 'C' && b[i] == 'A') ca[0]++; if (a[i] == 'T' && b[i] == 'A') at[1]++; if (a[i] == 'C' && b[i] == 'T') tc[1]++; if (a[i] == 'A' && b[i] == 'C') ca[1]++; } } int cnt = 0; if (at[0] > at[1]) { cnt += at[1]; at[0] -= at[1]; at[1] = 0; } else { cnt += at[0]; at[1] -= at[0]; at[0] = 0; } if (tc[0] > tc[1]) { cnt += tc[1]; tc[0] -= tc[1]; tc[1] = 0; } else { cnt += tc[0]; tc[1] -= tc[0]; tc[0] = 0; } if (ca[0] > ca[1]) { cnt += ca[1]; ca[0] -= ca[1]; ca[1] = 0; } else { cnt += ca[0]; ca[1] -= ca[0]; ca[0] = 0; } cnt += (2*(at[0]+at[1]+tc[0]+tc[1]+ca[0]+ca[1]))/3; return cnt; } // int main() { // string aa, bb; cin >> aa >> bb; void init(string aa, string bb) { a = aa; b = bb; n = a.size(); for (int i = 0; i < 3; i++) { as[i].resize(n); bs[i].resize(n); } if (a[0] == 'A') as[0][0]++; if (b[0] == 'A') bs[0][0]++; if (a[0] == 'T') as[1][0]++; if (b[0] == 'T') bs[1][0]++; if (a[0] == 'C') as[2][0]++; if (b[0] == 'C') bs[2][0]++; for (int i = 1; i < n; i++) { for (int j = 0; j < 3; j++) { as[j][i] = as[j][i-1]; bs[j][i] = bs[j][i-1]; } if (a[i] == 'A') as[0][i]++; if (b[i] == 'A') bs[0][i]++; if (a[i] == 'T') as[1][i]++; if (b[i] == 'T') bs[1][i]++; if (a[i] == 'C') as[2][i]++; if (b[i] == 'C') bs[2][i]++; } }
#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...