제출 #690941

#제출 시각아이디문제언어결과실행 시간메모리
690941vjudge1DNA 돌연변이 (IOI21_dna)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> #define ll long long #define pb push_back #define vl vector<ll> #define endl "\n" #define INF 0x3F3F3F3F using namespace std; const int sz=1e5+5; ll n,q,zer=0; ll TreeD[4*sz]; string a,b; void builD(ll v, ll l, ll r){ if(l==r){ if(a[l]!=b[l]){ TreeD[v]=1;return; } return; } ll m=(l+r)>>1; builD(v*2,l,m); builD(v*2+1,m+1,r); TreeD[v]=TreeD[v*2]+TreeD[v*2+1]; } ll FinD(ll v, ll tl, ll tr, ll l, ll r){ if(l>r){ return 0; } if(tl==l and tr==r){ return TreeD[v]; } ll tm=(tl+tr)>>1; return FinD(v*2,tl,tm,l,min(r,tm))+FinD(v*2+1,tm+1,tr,max(l,tm+1),r); } ll get_distance(ll left, ll right){ ll rx=FinD(1,0,n-1,left,right)-1; return max(rx,zer); } void init(string a, string b){ builD(1,0,n-1); vl ac,aa,at,bc,ba,bt; for(ll i=0;i<n;i++){ if(a[i]=='C'){ ac.pb(i); } else if(a[i]=='A'){ aa.pb(i); } else{ at.pb(i); } if(b[i]=='C'){ bc.pb(i); } else if(b[i]=='A'){ ba.pb(i); } else{ bt.pb(i); } } while(q--){ ll left, right; cin>>left>>right; ll lac=lower_bound(ac.begin(),ac.end(),left)-ac.begin(); ll uac=upper_bound(ac.begin(),ac.end(),right)-ac.begin(); if(ac[uac-1]>right){uac--;} ll cntac=uac-lac; cntac=max(cntac,zer); ll laa=lower_bound(aa.begin(),aa.end(),left)-aa.begin(); ll uaa=upper_bound(aa.begin(),aa.end(),right)-aa.begin(); if(aa[uaa-1]>right){uaa--;} ll cntaa=uaa-laa; cntaa=max(cntaa,zer); ll lat=lower_bound(at.begin(),at.end(),left)-at.begin(); ll uat=upper_bound(at.begin(),at.end(),right)-at.begin(); if(at[uat-1]>right){uac--;} ll cntat=uat-lat; cntat=max(cntat,zer); /*##############################################*/ ll lbc=lower_bound(bc.begin(),bc.end(),left)-bc.begin(); ll ubc=upper_bound(bc.begin(),bc.end(),right)-bc.begin(); if(ac[ubc-1]>right){ubc--;} ll cntbc=ubc-lbc; cntbc=max(cntbc,zer); ll lba=lower_bound(ba.begin(),ba.end(),left)-ba.begin(); ll uba=upper_bound(ba.begin(),ba.end(),right)-ba.begin(); if(ba[uba-1]>right){uba--;} ll cntba=uba-lba; cntba=max(cntba,zer); ll lbt=lower_bound(bt.begin(),bt.end(),left)-bt.begin(); ll ubt=upper_bound(bt.begin(),bt.end(),right)-bt.begin(); if(bt[ubt-1]>right){ubc--;} ll cntbt=ubt-lbt; cntbt=max(cntbt,zer); if(cntac!=cntbc or cntaa!=cntba or cntat!=cntbt){ cout<<-1<<endl; } else{ cout<<get_distance(left,right)<<endl; } } } int main(){ cin>>n>>q; //string a,b; cin>>a>>b; init(a,b); }

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/ccI3DXZc.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccIPr4wc.o:dna.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccI3DXZc.o: in function `main':
grader.cpp:(.text.startup+0x39d): undefined reference to `get_distance(int, int)'
collect2: error: ld returned 1 exit status