Submission #1271303

#TimeUsernameProblemLanguageResultExecution timeMemory
1271303nerrrminMutating DNA (IOI21_dna)C++20
71 / 100
1593 ms5704 KiB
#include "dna.h" #define pb push_back #include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 10; int n, prefa[maxn][3], prefb[maxn][3]; int is_cool[maxn], cool[maxn]; vector < pair < char, char > > g; string aa, bb; void init(std::string a, std::string b) { n = a.size(); aa = a; bb = b; for (int i = 0; i < a.size(); ++ i) { for (int j = 0; j < 3 && i; ++ j) prefa[i][j] = prefa[i-1][j]; if(a[i] == 'A')prefa[i][0] ++; else if(a[i] == 'T')prefa[i][1] ++; else prefa[i][2] ++; } for (int i = 0; i < b.size(); ++ i) { for (int j = 0; j < 3 && i; ++ j) prefb[i][j] = prefb[i-1][j]; if(b[i] == 'A')prefb[i][0] ++; else if(b[i] == 'T')prefb[i][1] ++; else prefb[i][2] ++; } for (int i = 0; i < n; ++ i) { if(i)cool[i] = cool[i-1]; if(a[i] == b[i])is_cool[i] = 1; cool[i] += is_cool[i]; } g.pb(make_pair('A', 'C')); g.pb(make_pair('A', 'T')); g.pb(make_pair('C', 'T')); } int geta(int lt, int rt, int t) { int cnt = prefa[rt][t]; if(lt > 0)cnt -= prefa[lt-1][t]; return cnt; } int getb(int lt, int rt, int t) { int cnt = prefb[rt][t]; if(lt > 0)cnt -= prefb[lt-1][t]; return cnt; } map < pair < char, char >, int > mp; int get_distance(int x, int y) { for (int j = 0; j < 3; ++ j) { if(geta(x, y, j) != getb(x, y, j))return -1; } mp.clear(); int ok = cool[y]; if(x)ok -= cool[x-1]; for (int i = x; i <= y; ++ i) { if(aa[i] != bb[i]) { mp[make_pair(aa[i], bb[i])] ++; } } int lft = y - x + 1 - ok; int dvoiki = 0; for (auto &[f, s]: g) { int br = mp[{f, s}]; int br_rev = mp[{s, f}]; dvoiki += min(br, br_rev) ; } int real_left = lft - dvoiki * 2; return max(0, max(0, real_left/3 * 2) + dvoiki); }
#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...