This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vll;
typedef vector<vll> vvll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> pi;
typedef vector<pi> vpi;
typedef pair<ll, ll> pll;
typedef vector<pll> vpll;
typedef vector<bool> vb;
typedef set<ll> sll;
#define IOS cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false)
#define INF(dtype) numeric_limits<dtype>::max()
#define NINF(dtype) numeric_limits<dtype>::min()
#define fi first
#define se second
typedef pair<int, vb> pib;
pib solve_n1(int n, int m, const vi& s, const vi& f) {
vb config(n, false);
// Case 1: n == 1
bool less_exists = false;
bool greater_exists = false;
int spos = s[0];
int ans = 0;
for(int fv : f) {
if(fv < spos) {
less_exists = true;
ans = max(ans, spos - fv);
} else if(fv > spos) {
greater_exists = true;
ans = max(ans, fv - spos);
}
}
config[0] = greater_exists;
if(less_exists && greater_exists) return {-1, config};
return {ans, config};
}
pib solve(int n, int m, const vi& s, const vi& f) {
if(n == 1) {
return solve_n1(n, m, s, f);
}
int ans_config_mask = 0;
int ans = INF(int);
for(int mask = 0; mask < (1 << n); mask++) {
int cost = 0;
for(int i = 0; i < m; i++) {
int min_cost = INF(int);
for(int j = 0; j < n; j++) {
if((mask >> j) & 0b1) {
// points to right
if(f[i] >= s[j]) min_cost = min(min_cost, f[i] - s[j]);
} else {
// points to left
if(f[i] <= s[j]) min_cost = min(min_cost, s[j] - f[i]);
}
}
cost = max(cost, min_cost);
}
if(cost < ans) {
ans = cost;
ans_config_mask = mask;
}
}
vb config(n, false);
for(int i = 0; i < n; i++) config[i] = (ans_config_mask >> i) & 0b1;
return {ans, config};
}
int main() {
IOS;
int n, m;
cin >> n >> m;
vi s(n, 0);
vi f(m, 0);
for(int& sv : s) cin >> sv;
for(int& fv : f) cin >> fv;
auto [ans, config] = solve(n, m, s, f);
cout << ans << "\n";
if(ans != -1) {
for(const bool& b : config) cout << (b ? 'R' : 'L');
cout << "\n";
}
cout << flush;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |