제출 #1142498

#제출 시각아이디문제언어결과실행 시간메모리
1142498MighilonSprinklers (CEOI24_sprinklers)C++20
3 / 100
197 ms4800 KiB
#include <bits/stdc++.h> using namespace std; #define all(a) a.begin(),a.end() int main(){ int n,m; cin>>n>>m; vector<int> s(n),f(m); for(int i=0;i<n;++i) cin>>s[i]; for(int i=0;i<m;++i) cin>>f[i]; vector<string> dir(n+1); auto fun=[&](int k)->bool{ vector<int> dp(n+1); auto update=[&](int i,int j,string x){ if(dp[i]<=j){ dp[i]=j; dir[i]=x; } }; for(int i=0;i<n;++i){ update(i+1,dp[i],"L"); if(dp[i]>=m)continue; int x=f[dp[i]]; if(s[i]-k<=x&&x<=s[i]){ int id=upper_bound(all(f),s[i])-f.begin(); update(i+1,id,"L"); } if(s[i]<=x&&x<=s[i]+k){ int id=upper_bound(all(f),s[i]+k)-f.begin(); update(i+1,id,"R"); } if(i<n-1){ if(s[i+1]-k<=x&&x<=s[i]+k){ int id=upper_bound(all(f),s[i]+k)-f.begin(); update(i+2,id,"RL"); } } } return dp[n]>=m; }; int ans=-1; int l=0,r=1e9; while(l<=r){ int m=l+(r-l)/2; //cout<<m<<" "<<fun(m)<<endl; if(fun(m)){ ans=m; r=m-1; } else l=m+1; } if(!~ans){ cout<<-1<<endl; return 0; } cout<<ans<<endl; string x; for(int i=n-1;i>=0;--i){ if(dir[i+1].size()==1){ x.push_back(dir[i+1][0]); } else{ x.push_back(dir[i+1][1]); x.push_back(dir[i+1][0]); i--; } } reverse(all(x)); cout<<x<<endl; return 0; }
#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...