제출 #437175

#제출 시각아이디문제언어결과실행 시간메모리
437175flashhhDNA 돌연변이 (IOI21_dna)C++17
100 / 100
46 ms5188 KiB
#include <bits/stdc++.h> #define ll long long #define pii pair<int,int> #define tii tuple<int,int,int> #define fi first #define se second #define bp __builtin_popcount #define nmax 100010 #define pb emplace_back int getbit(ll x,int y) { return (x>>y)&1; } ll getoff(ll x,int y) { return x^((1ll)<<y); } using namespace std; struct node { int AT,AC,TA,TC,CA,CT; node() {} }; int n,q; string a,b; node pre[nmax]; void init(string aa,string bb) { a=aa; b=bb; n=a.length(); for (int i=0;i<n;++i) { pre[i]=pre[i-1]; if (a[i]=='A') { if (b[i]=='C') ++pre[i].AC; else if (b[i]=='T') ++pre[i].AT; } else if (a[i]=='C') { if (b[i]=='A') ++pre[i].CA; else if (b[i]=='T') ++pre[i].CT; } else if (a[i]=='T') { if (b[i]=='A') ++pre[i].TA; else if (b[i]=='C') ++pre[i].TC; } } } int get_distance(int x,int y) { int AC=pre[y].AC-pre[x-1].AC; int AT=pre[y].AT-pre[x-1].AT; int CA=pre[y].CA-pre[x-1].CA; int CT=pre[y].CT-pre[x-1].CT; int TA=pre[y].TA-pre[x-1].TA; int TC=pre[y].TC-pre[x-1].TC; if (AC+AT!=CA+TA) return -1; if (CA+CT!=AC+TC) return -1; if (TA+TC!=AT+CT) return -1; int ans1=AC+AT; if (AC>CA) ans1+=CT; else if (AT>TA) ans1+=TC; else ans1+=CT; int ans2=CA+CT; if (CA>AC) ans2+=AT; else if (CT>TC) ans2+=TA; else ans2+=AT; int ans3=TA+TC; if (TA>AT) ans3+=AC; else if (TC>CT) ans3+=CA; else ans3+=AC; int res=min({ans1,ans2,ans3}); return res; }
#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...