제출 #1178613

#제출 시각아이디문제언어결과실행 시간메모리
1178613alexddSprinklers (CEOI24_sprinklers)C++20
3 / 100
2096 ms13272 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int INF = 4e9; int n,m; int s[100005],f[100005]; bool broken[100005]; char dir[100005]; map<int,int> mp; bool verif(int k) { vector<bool> used(n+2,0); int ps=1,pf=1; while(ps<=n || pf<=m) { if(ps<=n && (pf>m || s[ps] < f[pf])) { if(!used[ps]) { dir[ps] = 'R'; while(pf<=m && f[pf] <= s[ps] + k) pf++; } ps++; } else { if(ps>n || f[pf] < s[ps] - k) return 0; if(!broken[ps] && ps+1<=n && f[pf] >= s[ps+1] - k) { used[ps] = used[ps+1] = 1; dir[ps] = 'R'; dir[ps+1] = 'L'; while(pf<=m && f[pf] <= s[ps+1]) pf++; ps += 2; } else { assert(used[ps] == 0); used[ps] = 1; dir[ps] = 'L'; while(pf<=m && f[pf] <= s[ps]) pf++; ps++; } } } return 1; } signed main() { cin>>n>>m; for(int i=1;i<=n;i++) { cin>>s[i]; mp[s[i]]++; } for(int i=1;i<=m;i++) { cin>>f[i]; if(mp[f[i]]) { i--; m--; } } for(int i=1;i<n;i++) { broken[i] = 1; for(int j=1;j<=m;j++) { if(s[i] < f[j] && f[j] < s[i+1]) { broken[i] = 0; break; } } } if(!verif(INF)) { cout<<-1; return 0; } int st=0,dr=INF,ans=INF; while(st<=dr) { int mij=(st+dr)/2; if(verif(mij)) { ans = mij; dr = mij-1; } else st = mij+1; } verif(ans); cout<<ans<<"\n"; for(int i=1;i<=n;i++) cout<<dir[i]; 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...