Submission #1214202

#TimeUsernameProblemLanguageResultExecution timeMemory
1214202MateiKing80Sprinklers (CEOI24_sprinklers)C++20
100 / 100
552 ms6680 KiB
#include <bits/stdc++.h> using namespace std; const int inf = 1e9; int main() { int n, m; cin >> n >> m; vector<int> spr; vector<int> fl; map<int,int> fli; for (int i = 0; i < n; i ++) { int x; cin >> x; spr.push_back(x); } for (int i = 0; i < m; i ++) { int x; cin >> x; fl.push_back(x); fli[x] = i; } fli[2 * inf] = m; int lower = 0, upper = inf + 2; while (1) { int kval = (lower + upper) / 2 - 1; if (lower + 1 >= upper) { if (lower == inf + 1) { cout << "-1\n"; return 0; } else { kval = lower; } } vector<pair<int, int>> dp(n + 1); for (int i = 0; i < n; i ++) { pair<int, int> curval = dp[i]; dp[i + 1] = max(dp[i + 1], {curval.first, 0}); if (curval.first < m) { if (fl[curval.first] >= spr[i] - kval) { dp[i + 1] = max(dp[i + 1], {fli.upper_bound(spr[i])->second, -1}); } if (fl[curval.first] >= spr[i]) { dp[i + 1] = max(dp[i + 1], {fli.upper_bound(spr[i] + kval)->second, 1}); } if (i + 1 < n && spr[i] <= spr[i] + kval) { if (fl[curval.first] >= spr[i + 1] - kval) { dp[i + 2] = max(dp[i + 2], {fli.upper_bound(spr[i] + kval)->second, 2}); } } } } if (lower + 1 >= upper) { cout << lower << '\n'; string rec(n, ' '); int ind = n; while (ind) { if (dp[ind].second == -1) { rec[ind - 1] = 'L'; ind --; } else if (dp[ind].second == 1) { rec[ind - 1] = 'R'; ind --; } else if (dp[ind].second == 2) { rec[ind - 1] = 'L'; rec[ind - 2] = 'R'; ind -= 2; } else { rec[ind - 1] = 'L'; ind --; } } cout << rec << '\n'; return 0; } if (dp.back().first == m) { upper = kval + 1; } else { lower = kval + 1; } } }
#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...