Submission #1114471

#TimeUsernameProblemLanguageResultExecution timeMemory
1114471dynam1cSprinklers (CEOI24_sprinklers)C++17
26 / 100
116 ms3196 KiB
#include <bits/stdc++.h> using namespace std; int main() { int n, m; cin >> n >> m; vector<int> s(n), f(m); for (int& e : s) cin >> e; for (int& e : f) cin >> e; vector<char> d(n); auto check = [&](int k) { d.assign(n, 0); int x = -1; int j = 0; int li = -1, lj; for (int i = 0; i < n; i++) { if (s[i] <= x) x = s[i]+k, d[i] = 'R'; else if (j < m && f[j] < s[i]) { if (s[i]-f[j] > k) return false; x = s[i], d[i] = 'L'; if (li >= 0 && s[i]-k <= f[lj]) { x = s[li]+k; d[li] = 'R'; } li = i, lj = j; } else x = s[i]+k, d[i] = 'R'; while (j < m && f[j] <= x) j++; } return j == m; }; if (!check(1e9)) { cout << -1 << endl; return 0; } int l = -1, r = 1e9; while (r-l > 1) { int m = (l+r)/2; if (check(m)) r = m; else l = m; } check(r); for (int i = 0; i < n; i++) if (d[i] == 'L') s[i] -= r; sort(s.begin(), s.end()); int j = 0; for (int e : s) { if (j == m) break; assert(e <= f[j]); while (j < m && f[j] <= e+r) j++; } assert(j == m); cout << r << endl; for (char c : d) cout << c; cout << endl; }
#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...