Submission #1047283

# Submission time Handle Problem Language Result Execution time Memory
1047283 2024-08-07T11:39:21 Z Mher777 Sprinklers (CEOI24_sprinklers) C++17
3 / 100
50 ms 3052 KB
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <iomanip>
#include <array>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <bitset>
#include <list>
#include <iterator>
#include <numeric>
#include <complex>
#include <utility>
#include <random>
#include <cassert>
#include <fstream>
using namespace std;
mt19937_64 rnd(7069);

/* -------------------- Typedefs -------------------- */

typedef int itn;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef float fl;
typedef long double ld;

/* -------------------- Usings -------------------- */

using vi = vector<int>;
using vll = vector<ll>;
using mii = map<int, int>;
using mll = map<ll, ll>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

/* -------------------- Defines -------------------- */

#define ff first
#define ss second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define mpr make_pair
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define all(x) (x).begin(), (x).end()
#define USACO freopen("feast.in", "r", stdin); freopen("feast.out", "w", stdout);

/* -------------------- Constants -------------------- */

const int dx[8] = { -1, 0, 1, 0, -1, -1, 1, 1 };
const int dy[8] = { 0, -1, 0, 1, -1, 1, -1, 1 };
const int MAX = int(1e9 + 5);
const ll MAXL = ll(1e18) + 5ll;
const ll MOD = ll(1000000007);
const ll MOD2 = ll(998244353);

/* -------------------- Functions -------------------- */

void fastio() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}

void precision(int x) {
    cout.setf(ios::fixed | ios::showpoint);
    cout.precision(x);
}

ll gcd(ll a, ll b) {
    if (a == 0 || b == 0) return(max(a, b));
    while (b) {
        a %= b;
        swap(a, b);
    }
    return a;
}

ll lcm(ll a, ll b) {
    return a / gcd(a, b) * b;
}

ll range_sum(ll a, ll b) {
    if (a > b) return 0ll;
    ll dif = a - 1, cnt = b - a + 1;
    ll ans = ((b - a + 1) * (b - a + 2)) / 2;
    ans += ((b - a + 1) * dif);
    return ans;
}

string dec_to_bin(ll a) {
    string s = "";
    for (ll i = a; i > 0; ) {
        ll k = i % 2;
        i /= 2;
        char c = k + 48;
        s += c;
    }
    if (a == 0) {
        s = "0";
    }
    reverse(all(s));
    return s;
}

ll bin_to_dec(string s) {
    ll num = 0;
    for (int i = 0; i < s.size(); i++) {
        num *= 2ll;
        num += (s[i] - '0');
    }
    return num;
}

ll factorial_by_mod(ll n, ll mod) {
    ll ans = 1;
    ll num;
    for (ll i = 1; i <= n; ++i) {
        num = i % mod;
        ans *= num;
        ans %= mod;
    }
    return ans;
}

bool isPrime(ll a) {
    if (a == 1) return false;
    for (ll i = 2; i * i <= a; i++) {
        if (a % i == 0) return false;
    }
    return true;
}

ll binpow(ll a, ll b) {
    if (!a) return 0;
    ll ans = 1;
    while (b) {
        if (b & 1) {
            ans *= a;
        }
        b >>= 1;
        a *= a;
    }
    return ans;
}

ll binpow_by_mod(ll a, ll b, ll mod) {
    if (!a) return 0;
    ll ans = 1;
    while (b) {
        if (b & 1) {
            ans *= a;
            ans %= mod;
        }
        b >>= 1;
        a *= a;
        a %= mod;
    }
    return ans;
}

/* -------------------- Solution -------------------- */

const int N = 100005;
int s[N], f[N], dp[N], from[N], type[N];
int n, m;
// 1 -> L, 2 -> R, 3 -> RL

void slv() {
    cin >> n >> m;
    ++n;
    for (int i = 2; i <= n; ++i) {
        cin >> s[i];
    }
    for (int i = 1; i <= m; ++i) {
        cin >> f[i];
    }
    int l = 0, r = 1e9, mid, lx, rx, ans = MAX;
    while (l <= r) {
        mid = (l + r) / 2;
        for (int i = 2; i <= n; ++i) {
            dp[i] = 0;
            lx = s[i] - mid, rx = s[i];
            int ind = dp[i - 1] + 1;
            while (ind <= m && f[ind] >= lx && f[ind] <= rx) {
                ++ind;
            }
            if (ind - 1 > dp[i]) {
                dp[i] = ind - 1;
                type[i] = 1;
                from[i] = i - 1;
            }
            ind = dp[i - 1] + 1;
            lx = s[i], rx = s[i] + mid;
            while (ind <= m && f[ind] >= lx && f[ind] <= rx) {
                ++ind;
            }
            if (ind - 1 > dp[i]) {
                dp[i] = ind - 1;
                type[i] = 2;
                from[i] = i - 1;
            }
            if (i == 2 || (s[i] - mid) >= s[i - 1] || (s[i - 1] + mid) <= s[i]) continue;
            ind = dp[i - 2] + 1;
            lx = s[i] - mid, rx = s[i - 1] + mid;
            while (ind <= m && f[ind] >= lx && f[ind] <= rx) {
                ++ind;
            }
            if (ind - 1 > dp[i]) {
                dp[i] = ind - 1;
                type[i] = 3;
                from[i] = i - 2;
            }
        }
        if (dp[n] == m) {
            r = mid - 1;
            ans = mid;
        }
        else {
            l = mid + 1;
        }
    }
    if (ans == MAX) {
        int x = 1;
        cout << -1;
        return;
    }
    cout << ans << '\n';
    int ind = n;
    vi v;
    while (ind >= 2) {
        v.pub(ind);
        ind = from[ind];
    }
    reverse(all(v));
    for (auto elem : v) {
        if (type[elem] == 1) {
            cout << "L";
        }
        else if (type[elem] == 2) {
            cout << "R";
        }
        else {
            cout << "RL";
        }
    }
}

void cs() {
    int tstc = 1;
    //cin >> tstc;
    while (tstc--) {
        slv();
    }
}

void precalc() {
    return;
}

int main() {
    fastio();
    precalc();
    //precision(0);
    cs();
    return 0;
}

Compilation message

Main.cpp: In function 'll range_sum(ll, ll)':
Main.cpp:97:21: warning: unused variable 'cnt' [-Wunused-variable]
   97 |     ll dif = a - 1, cnt = b - a + 1;
      |                     ^~~
Main.cpp: In function 'll bin_to_dec(std::string)':
Main.cpp:120:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  120 |     for (int i = 0; i < s.size(); i++) {
      |                     ~~^~~~~~~~~~
Main.cpp: In function 'void slv()':
Main.cpp:236:13: warning: unused variable 'x' [-Wunused-variable]
  236 |         int x = 1;
      |             ^
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Correct
2 Correct 0 ms 348 KB Correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Correct
2 Correct 6 ms 780 KB Correct
3 Correct 1 ms 348 KB Correct
4 Correct 6 ms 868 KB Correct
5 Correct 6 ms 776 KB Correct
6 Correct 1 ms 348 KB Correct
7 Correct 0 ms 348 KB Correct
8 Correct 2 ms 344 KB Correct
9 Correct 0 ms 348 KB Correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Correct
2 Correct 10 ms 860 KB Correct
3 Correct 3 ms 604 KB Correct
4 Correct 35 ms 3052 KB Correct
5 Correct 36 ms 3028 KB Correct
6 Correct 0 ms 344 KB Correct
7 Correct 1 ms 348 KB Correct
8 Correct 28 ms 3052 KB Correct
9 Correct 25 ms 3032 KB Correct
10 Correct 30 ms 3028 KB Correct
11 Correct 29 ms 2516 KB Correct
12 Correct 18 ms 1692 KB Correct
13 Correct 28 ms 2924 KB Correct
14 Incorrect 29 ms 2776 KB User solution is incorrect
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Correct
2 Correct 0 ms 348 KB Correct
3 Correct 0 ms 348 KB Correct
4 Incorrect 0 ms 420 KB User solution is incorrect
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Correct
2 Correct 15 ms 1116 KB Correct
3 Correct 45 ms 3044 KB Correct
4 Correct 46 ms 3028 KB Correct
5 Correct 46 ms 3028 KB Correct
6 Correct 46 ms 2836 KB Correct
7 Correct 46 ms 3028 KB Correct
8 Correct 46 ms 3032 KB Correct
9 Correct 50 ms 3032 KB Correct
10 Correct 47 ms 3036 KB Correct
11 Correct 46 ms 3028 KB Correct
12 Incorrect 0 ms 344 KB User solution is incorrect
13 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Correct
2 Correct 0 ms 348 KB Correct
3 Correct 6 ms 780 KB Correct
4 Correct 1 ms 348 KB Correct
5 Correct 6 ms 868 KB Correct
6 Correct 6 ms 776 KB Correct
7 Correct 1 ms 348 KB Correct
8 Correct 0 ms 348 KB Correct
9 Correct 2 ms 344 KB Correct
10 Correct 0 ms 348 KB Correct
11 Correct 10 ms 860 KB Correct
12 Correct 3 ms 604 KB Correct
13 Correct 35 ms 3052 KB Correct
14 Correct 36 ms 3028 KB Correct
15 Correct 0 ms 344 KB Correct
16 Correct 1 ms 348 KB Correct
17 Correct 28 ms 3052 KB Correct
18 Correct 25 ms 3032 KB Correct
19 Correct 30 ms 3028 KB Correct
20 Correct 29 ms 2516 KB Correct
21 Correct 18 ms 1692 KB Correct
22 Correct 28 ms 2924 KB Correct
23 Incorrect 29 ms 2776 KB User solution is incorrect
24 Halted 0 ms 0 KB -