Submission #1193516

#TimeUsernameProblemLanguageResultExecution timeMemory
1193516UnforgettableplSprinklers (CEOI24_sprinklers)C++20
100 / 100
419 ms3640 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long


int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int N,M;
    cin >> N >> M;
    vector<int> S(N+1);
    vector<int> F(M+1);
    for(int i=1;i<=N;i++)cin>>S[i];
    for(int i=1;i<=M;i++)cin>>F[i];
    vector<int> turn(N+1); // 1 is right, 2 is twisty
    auto getNext = [&](int x){
        auto iter = upper_bound(F.begin()+1,F.end(),x);
        if(iter==F.end())return -1ll;
        return *iter;
    };
    auto solve = [&](int K){
        vector<int> DP(N+1,-1);
        for(int i=1;i<=N;i++){
            {
                if(getNext(DP[i-1])==-1){
                    DP[i]=DP[i-1];
                    turn[i]=1;
                    continue;
                } else if(getNext(DP[i-1])>=S[i]-K){
                    DP[i]=S[i];
                    turn[i]=0;
                }
                if(getNext(DP[i-1])>=S[i]){
                    DP[i]=S[i]+K;
                    turn[i]=1;
                }
            }
            {
                if(i!=1 and getNext(DP[i-2])>=S[i]-K){
                    if(S[i-1]+K>DP[i]){
                        DP[i]=S[i-1]+K;
                        turn[i]=2;
                    }
                }
            }
        }
        return getNext(DP[N])==-1;
    };
    int ans = -1;
    for(int jump=(1ll<<31);jump;jump/=2){
        if(!solve(ans+jump))ans+=jump;
    }
    ans++;
    if(ans>1e9)cout<<"-1\n";
    else {
        solve(ans);
        cout << ans << '\n';
        for(int i=N;i;i--)if(turn[i]==2){
            turn[i]=0;
            turn[i-1]=1;
            i--;
        }
        for(int i=1;i<=N;i++)if(turn[i])cout<<'R';
            else cout << 'L';
        cout << '\n';
    }
}
#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...