Submission #1232014

#TimeUsernameProblemLanguageResultExecution timeMemory
1232014PVM_pvmSprinklers (CEOI24_sprinklers)C++20
9 / 100
88 ms1508 KiB
#include<bits/stdc++.h> using namespace std; #define MAXN 100'007 int n,m; int s[MAXN]; int f[MAXN]; string otg=""; bool check(int k, bool otp) { int len=1<<n; for (int msk=0;msk<len;msk++) { bool dl=true; for (int q=1;q<=m;q++) { bool mg=false; for (int w=1;w<=n;w++) { if ((msk>>(w-1))%2==0 && f[q]<=s[w]) { if ((s[w]-f[q])<=k) {mg=true;break;} } if ((msk>>(w-1))%2==1 && f[q]>=s[w]) { if ((f[q]-s[w])<=k) {mg=true;break;} } } if (!mg) { dl=false; break; } } if (dl) { if (otp) { for (int w=0;w<n;w++) { if ((msk>>w)%2==0) otg[w]='L'; else otg[w]='R'; } cout<<otg<<"\n"; } return true; } } return false; } bool check2(int k, bool otp) { int lstS=n,lstF=m; while (true) { if (lstF<=0) break; if (lstS<=0) return false; //cout<<lstS<<" "<<lstF<<"\n"; if (f[lstF]>s[lstS]) { ///nqkoi trqbva da prysne lstF int l=0,r=lstS+1; while (l<r-1) { int mid=(l+r)/2; if (s[mid]<(f[lstF]-k)) l=mid; else r=mid; } if (r==(lstS+1)) return false; ///r e posledniq koito ima umeniqta mi ///sega tyrsim pyrvoto cvete, koeto e po-golqmo ili ravno na r int ll=0,rr=lstF; while (ll<rr-1) { int mid=(ll+rr)/2; if (f[mid]>=s[r]) rr=mid; else ll=mid; } ///rr e pyrvoto cvete, koeto shte byde hvanato v struqta ///sega tyrsim pyrviq, koito e po-malko ili ravno na rr int lll=r,rrr=lstS+1; while (lll<rrr-1) { int mid=(lll+rrr)/2; if (s[mid]<=f[rr]) lll=mid; else rrr=mid; } ///lll e tozi koito trqbva da ocveti lstF otg[lll-1]='R'; int mnn=s[lll]; if (lll!=lstS) { for (int q=lll+1;q<=lstS;q++) { mnn=min(mnn,s[q]-k); otg[q-1]='L'; } } lstS=lll-1; while (lstF>=1 && f[lstF]>=mnn) lstF--; } else { ///lstS pryska nalqvo otg[lstS-1]='L'; while (lstF>=1 && (s[lstS]-f[lstF])<=k) lstF--; lstS--; } } if (otp) { for (int q=0;q<lstS;q++) otg[q]='L'; cout<<otg<<"\n"; } return true; } int main() { otg=""; cin>>n>>m; for (int q=0;q<n;q++) otg+='.'; for (int q=1;q<=n;q++) cin>>s[q]; for (int q=1;q<=m;q++) cin>>f[q]; int l=-1,r=1e9+1; while (l<r-1) { int mid=(l+r)/2; //cout<<mid<<"\n"; bool ch=check2(mid,0); if (ch) r=mid; else l=mid; } if (r==(1e9+1)) cout<<"-1\n"; else { cout<<r<<"\n"; check2(r,1); } } /* 3 4 10 18 20 10 11 14 24 */
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...