Submission #1223240

#TimeUsernameProblemLanguageResultExecution timeMemory
1223240santi3223DNA 돌연변이 (IOI21_dna)C++17
100 / 100
33 ms14664 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define vb vector<bool> #define pb push_back #define ff(aa, bb, cc) for(ll aa = bb; aa < cc; aa++) #define vl vector<ll> #define pll pair<ll, ll> #define fi first #define se second #define ed "\n" #define all(aaa) aaa.begin(), aaa.end() #define rall(aaa) aaa.rbegin(), aaa.rend() string a, b; vl aa, ac, at, ba, bc, bt; vl AA, AC, AT, CA, CC, CT, TA, TC, TT; void init(string x, string y){ a = x; b = y; ll n = a.size(); aa = vl(n, 0); ac = vl(n, 0); at = vl(n, 0); ba = vl(n, 0); bc = vl(n, 0); bt = vl(n, 0); AA = vl(n, 0); AC = vl(n, 0); AT = vl(n, 0); CA = vl(n, 0); CC = vl(n, 0); CT = vl(n, 0); TA = vl(n, 0); TC = vl(n, 0); TT = vl(n, 0); ff(i, 0, n){ if(i != 0){ aa[i] = aa[i-1]; ac[i] = ac[i-1]; at[i] = at[i-1]; ba[i] = ba[i-1]; bc[i] = bc[i-1]; bt[i] = bt[i-1]; AA[i] = AA[i-1]; AC[i] = AC[i-1]; AT[i] = AT[i-1]; CA[i] = CA[i-1]; CC[i] = CC[i-1]; CT[i] = CT[i-1]; TA[i] = TA[i-1]; TC[i] = TC[i-1]; TT[i] = TT[i-1]; } if(a[i] == 'A'){ aa[i]++; } else if(a[i] == 'C'){ ac[i]++; } else{ at[i]++; } if(b[i] == 'A'){ ba[i]++; } else if(b[i] == 'C'){ bc[i]++; } else{ bt[i]++; } if(a[i] == 'A' && b[i] == 'A'){ AA[i]++; } if(a[i] == 'A' && b[i] == 'C'){ AC[i]++; } if(a[i] == 'A' && b[i] == 'T'){ AT[i]++; } if(a[i] == 'C' && b[i] == 'A'){ CA[i]++; } if(a[i] == 'C' && b[i] == 'C'){ CC[i]++; } if(a[i] == 'C' && b[i] == 'T'){ CT[i]++; } if(a[i] == 'T' && b[i] == 'A'){ TA[i]++; } if(a[i] == 'T' && b[i] == 'C'){ TC[i]++; } if(a[i] == 'T' && b[i] == 'T'){ TT[i]++; } } } int get_distance(int x, int y){ ll qaa = aa[y], qac = ac[y], qat = at[y]; ll qba = ba[y], qbc = bc[y], qbt = bt[y]; ll qAA = AA[y], qAC = AC[y], qAT = AT[y]; ll qCA = CA[y], qCC = CC[y], qCT = CT[y]; ll qTA = TA[y], qTC = TC[y], qTT = TT[y]; if(x != 0){ qaa = aa[y]-aa[x-1]; qac = ac[y]-ac[x-1]; qat = at[y]-at[x-1]; qba = ba[y]-ba[x-1]; qbc = bc[y]-bc[x-1]; qbt = bt[y]-bt[x-1]; qAA = AA[y]-AA[x-1]; qAC = AC[y]-AC[x-1]; qAT = AT[y]-AT[x-1]; qCA = CA[y]-CA[x-1]; qCC = CC[y]-CC[x-1]; qCT = CT[y]-CT[x-1]; qTA = TA[y]-TA[x-1]; qTC = TC[y]-TC[x-1]; qTT = TT[y]-TT[x-1]; } if(qaa != qba || qac != qbc || qat != qbt){ //cout << qaa << " " << qba << ed; //cout << qac << " " << qbc << ed; //cout << qat << " " << qbt << ed; return -1; } int ans = 0; int aux = min(qAC, qCA); ans += aux; qAC -= aux; qCA -= aux; //cout << "CA" << aux << ed; aux = min(qAT, qTA); ans += aux; qAT -= aux; qTA -= aux; //cout << "AT" << aux << ed; aux = min(qCT, qTC); ans += aux; qTC -= aux; qCT -= aux; //cout << "CT" << aux << ed; //cout << "TOT " << res << " " << aux << ed; //cout << wrong[y] << " " << wrong[x-1] << ed; int ex = qAT+qTA+qCA+qAC+qCT+qTC; ans += (ex/3)*2; return ans; } /* int main(){ ll n, q; cin >> n >> q; string A, B; cin >> A >> B; init(A, B); while(q--){ int na, nb; cin >> na >> nb; cout << get_distance(na, nb) << ed; } } */
#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...