제출 #1140534

#제출 시각아이디문제언어결과실행 시간메모리
1140534ghammazhassanSprinklers (CEOI24_sprinklers)C++20
26 / 100
376 ms2900 KiB
// #include <bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <map>
#include <vector>
#include <iomanip>
#include <string>
#include <queue>
#include <set>
#include <deque>
using namespace std;
#define int long long
#define endl "\n";
const int N=2e5+5;
const int M=1e9+7;
void solve()
{
	int n,m;
	cin >> n >> m;
	vector<int>a(n),b(m);
	for (int i=0;i<n;i++){
		cin >> a[i];
	}
	for (int i=0;i<m;i++){
		cin >> b[i];
	}
	if (n==1 and a[0]>b[0] and a[0]<b[m-1]){
		cout << -1 << endl;
		return;
	}
	else if (n==1){
		if (a[0]>b[0]){
			cout << a[0]-b[0] << endl;
			cout << 'L' << endl;
		}
		else{
			cout << b[m-1]-a[0] << endl;
			cout << 'R' << endl;
		}
		return;
	}
	if (n<=10 and m<=1000){
		int l=0;
		int h=b[m-1]+1;
		int mi=(l+h)/2;
		while (l<h){
			bool f=0;
			for (int x=0;x<pow(2,n);x++){
				string s;
				for (int i=0;i<n;i++){
					if (x&(int)pow(2,i)){
						s+='L';
					}
					else{
						s+='R';
					}
				}
				vector<int>vi(m);
				for (int i=0;i<m;i++){
					for (int j=0;j<n;j++){
						if (s[j]=='L'){
							if (b[i]>=a[j]-mi and b[i]<=a[j]){
								vi[i]=1;
							}
						}
						else{
							if (b[i]<=a[j]+mi and b[i]>=a[j]){
								vi[i]=1;
							}
						}
					}
				}
				bool y=1;
				for (int i:vi){
					if (i==0){
						y=0;
					}
				}
				if (y){
					f=1;
					// cout << mi << " " << s << endl;
				}
			}
			if (f){
				h=mi;
			}
			else{
				l=mi+1;
			}
			mi=(l+h)/2;
		}
		for (int x=0;x<pow(2,n);x++){
			string s;
			for (int i=0;i<n;i++){
				if (x&(int)pow(2,i)){
					s+='L';
				}
				else{
					s+='R';
				}
			}
			vector<int>vi(m);
			for (int i=0;i<m;i++){
				for (int j=0;j<n;j++){
					if (s[j]=='L'){
						if (b[i]>=a[j]-mi and b[i]<=a[j]){
							vi[i]=1;
						}
					}
					else{
						if (b[i]<=a[j]+mi and b[i]>=a[j]){
							vi[i]=1;
						}
					}
				}
			}
			bool y=1;
			for (int i:vi){
				if (i==0){
					y=0;
				}
			}
			if (y){
				cout << mi << endl;
				cout << s << endl;
				break;
			}
		}



		return;
	}
	int l=0;
	int h=b[m-1]+1;
	int mi=(l+h)/2;
	while (l<h){
		queue<int>o;
		for (int p:b){
			o.push(p);
		}
		for (int i:a){
			if (!o.empty()){
				int he=o.front();
				if (he<i){
					while (!o.empty()){
						he=o.front();
						if (he>=i-mi and he<=i){
							o.pop();
						}
						else{
							break;
						}
					}
				}
				else{
					while (!o.empty()){
						he=o.front();
						if (he<=i+mi and he>=i){
							o.pop();
						}
						else{
							break;
						}
					}
				}
			}
		}
		if (o.empty()){
			h=mi;
		}
		else{
			l=mi+1;
		}
		mi=(l+h)/2;
	}
	string s;
	queue<int>o;
	for (int p:b){
		o.push(p);
	}
	for (int i:a){
		if (!o.empty()){
			int he=o.front();
			if (he<i){
				s+='L';
				while (!o.empty()){
					he=o.front();
					if (he>=i-mi and he<=i){
						o.pop();
					}
					else{
						break;
					}
				}
			}
			else{
				s+='R';
				while (!o.empty()){
					he=o.front();
					if (he<=i+mi and he>=i){
						o.pop();
					}
					else{
						break;
					}
				}
			}
		}
		else{
			s+='R';
		}
	}
	cout << mi << endl;
	cout << s << endl;
}
signed main()
{

    ios::sync_with_stdio(0);//DO NOT USE IN INTERACTIVE
    cin.tie(0), cout.tie(0);//DO NOT USE IN INTERACTIVE
    cout << fixed<<setprecision(9);
    int t=1;
    // cin >> t;
    for (int _=1;_<=t;_++){
    	solve();
    }
}
#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...