제출 #1159442

#제출 시각아이디문제언어결과실행 시간메모리
1159442equation_trackerDNA 돌연변이 (IOI21_dna)C++20
0 / 100
21 ms6912 KiB
#include "dna.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; vector<ll> pre_ta, pre_at, pre_ct, pre_tc, pre_ac, pre_ca; void init(std::string a, std::string b) { ll n = a.size(); pre_ca.resize(n + 1, 0); pre_ac.resize(n + 1, 0); pre_at.resize(n + 1, 0); pre_ta.resize(n + 1, 0); pre_tc.resize(n + 1, 0); pre_ct.resize(n + 1, 0); for (ll i = 0; i < n; i++) { if (a[i] == 'C' && b[i] == 'A') pre_ca[i + 1]++; else if (a[i] == 'A' && b[i] == 'C') pre_ac[i + 1]++; else if (a[i] == 'A' && b[i] == 'T') pre_at[i + 1]++; else if (a[i] == 'T' && b[i] == 'A') pre_ta[i + 1]++; else if (a[i] == 'T' && b[i] == 'C') pre_tc[i + 1]++; else if (a[i] == 'C' && b[i] == 'T') pre_ct[i + 1]++; } for (ll i = 1; i <= n; i++) { pre_ca[i] += pre_ca[i - 1]; pre_ac[i] += pre_ac[i - 1]; pre_at[i] += pre_at[i - 1]; pre_ta[i] += pre_ta[i - 1]; pre_tc[i] += pre_tc[i - 1]; pre_ct[i] += pre_ct[i - 1]; } } int get_distance(int x, int y) { ll ca = pre_ca[y+1] - pre_ca[x]; ll ac = pre_ac[y+1] - pre_ac[x]; ll at = pre_at[y+1] - pre_at[x]; ll ta = pre_ta[y+1] - pre_ta[x]; ll ct = pre_ct[y+1] - pre_ct[x]; ll tc = pre_tc[y+1] - pre_tc[x]; ll AT_min = min(at, ta); ll AC_min = min(ac, ca); ll CT_min = min(ct, tc); ll AT_max = max(at, ta); ll AC_max = max(ac, ca); ll CT_max = max(ct, tc); ll AC_dif = AC_max - AC_min; ll AT_dif = AT_max - AT_min; ll CT_dif = CT_max - CT_min; if (AC_dif == AT_dif && AT_dif == CT_dif && ((ac > ca && ct > tc && ta > at) || (ca > ac && at > ta && tc > ct)) ) return 2 * AC_dif + (AC_min + CT_min + AT_min); return -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...