Submission #1234649

#TimeUsernameProblemLanguageResultExecution timeMemory
1234649gry3125DNA 돌연변이 (IOI21_dna)C++20
35 / 100
47 ms5448 KiB
#include "dna.h" #include <bits/stdc++.h> #define ll long long int using namespace std; string a, b; int n; vector<ll> as, bs; // A = 0, T = 1 vector<int> t; void upd(int v, int tl, int tr, int pos, int val) { if (tl == tr) {t[v] = val; return;} int tm = (tl + tr) / 2; if (pos <= tm) upd(2*v, tl, tm, pos, val); else upd(2*v+1, tm+1, tr, pos, val); t[v] = t[2*v] + t[2*v+1]; } ll query(int v, int tl, int tr, int l, int r) { if (l > r) return 0; if (l == tl && r == tr) return t[v]; int tm = (tl + tr) / 2; ll lf = query(2*v, tl, tm, l, min(tm, r)); ll rg = query(2*v+1, tm+1, tr, max(tm+1, l), r); return lf + rg; } int get_distance(int x, int y) { if (x == y) { if (a[x] == b[x]) return 0; return -1; } if (x + 1 == y) { if (a[x] == b[x] && a[y] == b[y]) return 0; if (a[x] == b[y] && a[y] == b[x]) return 1; return -1; } ll suma = as[y], sumb = bs[y]; if (x > 0) { suma -= as[x-1]; sumb -= bs[x-1]; } if (suma != sumb) return -1; ll ans = query(1, 1, (1LL << 17), x+1, y+1); return ans/2; } // int main() { // COMMENT THIS // string aa, bb; cin >> aa >> bb; // COMMENT THIS void init(string aa, string bb) { a = aa; b = bb; n = a.size(); as.resize(n); bs.resize(n); if (a[0] == 'T') as[0]++; if (b[0] == 'T') bs[0]++; for (int i = 1; i < n; i++) { as[i] = as[i-1]; bs[i] = bs[i-1]; if (a[i] == 'T') as[i]++; if (b[i] == 'T') bs[i]++; } t.assign((1LL << 18), 0LL); for (int i = 0; i < n; i++) { if (a[i] != b[i]) { upd(1, 1, (1LL << 17), i+1, 1); } } }
#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...