Submission #1271299

#TimeUsernameProblemLanguageResultExecution timeMemory
1271299nerrrminMutating DNA (IOI21_dna)C++20
35 / 100
26 ms5644 KiB
#include "dna.h" #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]; void init(std::string a, std::string b) { n = a.size(); 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]; } } 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; } 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; } int ok = cool[y]; if(x)ok -= cool[x-1]; return max(0, (y - x + 1 - ok)/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...