답안 #1047267

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1047267 2024-08-07T11:32:29 Z Mher777 Sprinklers (CEOI24_sprinklers) C++17
0 / 100
46 ms 2668 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;
        assert(x == 2);
        cout << -1;
        return;
    }
    cout << ans << '\n';
    string answ;
    int ind = n;
    while (ind >= 2) {
        if (type[ind] == 3) {
            answ += "LR";
        }
        else if (type[ind] == 2) {
            answ += "R";
        }
        else {
            answ += "L";
        }
        ind = from[ind];
    }
    reverse(all(answ));
    cout << answ;
}

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++) {
      |                     ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Correct
2 Runtime error 1 ms 648 KB Execution killed with signal 6
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 648 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Correct
2 Correct 13 ms 884 KB Correct
3 Correct 3 ms 604 KB Correct
4 Correct 31 ms 2668 KB Correct
5 Correct 33 ms 2660 KB Correct
6 Correct 0 ms 348 KB Correct
7 Correct 0 ms 348 KB Correct
8 Correct 22 ms 2664 KB Correct
9 Correct 28 ms 2652 KB Correct
10 Correct 27 ms 2644 KB Correct
11 Correct 24 ms 2128 KB Correct
12 Correct 18 ms 1372 KB Correct
13 Correct 25 ms 2396 KB Correct
14 Incorrect 33 ms 2384 KB User solution is incorrect
15 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Correct
2 Runtime error 1 ms 648 KB Execution killed with signal 6
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Correct
2 Correct 12 ms 860 KB Correct
3 Correct 44 ms 2644 KB Correct
4 Correct 46 ms 2648 KB Correct
5 Correct 46 ms 2644 KB Correct
6 Correct 43 ms 2644 KB Correct
7 Correct 45 ms 2640 KB Correct
8 Correct 45 ms 2656 KB Correct
9 Correct 44 ms 2640 KB Correct
10 Correct 44 ms 2648 KB Correct
11 Correct 44 ms 2648 KB Correct
12 Incorrect 1 ms 344 KB User solution is incorrect
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Correct
2 Runtime error 1 ms 648 KB Execution killed with signal 6
3 Halted 0 ms 0 KB -