답안 #1075430

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1075430 2024-08-26T05:59:43 Z GrindMachine Sprinklers (CEOI24_sprinklers) C++17
20 / 100
2000 ms 5320 KB
#include <bits/stdc++.h>
using namespace std;

typedef long long int ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL)
#define pb push_back
#define endl '\n'
#define conts continue
#define ff first
#define ss second
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
#define sz(a) (int)a.size()

#define rep(i,n) for(int i = 0; i < n; ++i)
#define rep1(i,n) for(int i = 1; i <= n; ++i) 
#define rev(i,s,e) for(int i = s; i >= e; --i)
#define trav(i,a) for(auto &i : a)

template<typename T>
void amin(T &x, T y){
	x = min(x,y);
}

template<typename T>
void amax(T &x, T y){
	x = max(x,y);
}

template<typename A,typename B>
string to_string(pair<A,B> p);

string to_string(const string &s){
	return "'"+s+"'";
}

string to_string(const char *s){
	return to_string((string)s);
}

string to_string(bool b){
	return b?"true":"false";
}

template<typename A>
string to_string(A v){
	string res = "{";
	trav(x,v){
		res += to_string(x)+",";
	}
	if(res.back() == ',') res.pop_back();
	res += "}";
	return res;
}

template<typename A,typename B>
string to_string(pair<A,B> p){
	return "("+to_string(p.ff)+","+to_string(p.ss)+")";
}

#define debug(x) cout << #x << " = "; cout << to_string(x) << endl

const int MOD = 1e9 + 7;
const int N = 1e5 + 5;
const int inf1 = 1e9 + 5;
const ll inf2 = (ll)1e18 + 5;

void solve(int test_case){
	ll n,m; cin >> n >> m;
	vector<ll> a(n+5), b(m+5);
	rep1(i,n) cin >> a[i];
	rep1(i,m) cin >> b[i];
	sort(a.begin()+1,a.begin()+n+1);
	sort(b.begin()+1,b.begin()+m+1);

	// rep1(i,m){
	// 	if(binary_search(a.begin()+1,a.begin()+n+1,b[i])){
	// 		b[i] = -1;
	// 	}
	// }

	vector<array<ll,3>> c;
	rep1(i,n) c.pb({a[i],i,1});
	rep1(i,m){
		if(b[i] != -1){
			c.pb({b[i],i,2});
		}
	}
	sort(all(c));

	vector<char> ans(n+5);

	auto ok = [&](ll mid){
		rep(mask,1<<n){
			bool mask_ok = true;

			rep1(i,m){
				ll x = b[i];
				bool good = false;
				rep1(j,n){
					ll l = -1, r = -1;
					if(mask&(1<<(j-1))){
						l = a[j], r = a[j]+mid;
					}
					else{
						l = a[j]-mid, r = a[j];
					}

					if(l <= x and x <= r){
						good = true;
						break;
					}
				}

				if(!good){
					mask_ok = false;
					break;
				}
			}

			if(mask_ok){
				rep1(j,n){
					if(mask&(1<<(j-1))){
						ans[j] = 'R';
					}
					else{
						ans[j] = 'L';
					}
				}
				return true;
			}
		}

		return false;

		// ll mnf = inf2, mxs = -inf2;

		// for(auto [x,i,t] : c){
		// 	if(t == 1){
		// 		// sprinkler
		// 		if(mnf != inf2){
		// 			if(x-mid > mnf){
		// 				return false;
		// 			}
		// 			ans[i] = 'L';
		// 			mnf = inf2;
		// 		}
		// 		else{
		// 			mxs = x+mid;
		// 			ans[i] = 'R';
		// 		}
		// 	}
		// 	else{
		// 		// flower
		// 		if(mxs >= x) conts;
		// 		amin(mnf,x);
		// 	}
		// }

		// return mnf == inf2;
	};

	ll lo = 0, hi = inf1;
	ll best = -1;

	while(lo <= hi){
		ll mid = (lo+hi) >> 1;
		if(ok(mid)){
			best = mid;
			hi = mid-1;
		}
		else{
			lo = mid+1;
		}
	}

	cout << best << endl;
	if(best == -1) return;

	assert(ok(best));
	rep1(i,n) cout << ans[i];
	cout << endl;
}

int main(){
	int t = 1;
	// cin >> t;

	rep1(i,t){
		solve(i);
	}

	return 0;
}

# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Correct
2 Correct 0 ms 604 KB Correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 604 KB Correct
2 Correct 28 ms 5064 KB Correct
3 Correct 0 ms 344 KB Correct
4 Correct 33 ms 5296 KB Correct
5 Correct 41 ms 5292 KB Correct
6 Correct 0 ms 348 KB Correct
7 Correct 0 ms 348 KB Correct
8 Correct 9 ms 1544 KB Correct
9 Correct 0 ms 348 KB Correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Correct
2 Execution timed out 2045 ms 5316 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Correct
2 Correct 0 ms 604 KB Correct
3 Correct 5 ms 348 KB Correct
4 Correct 1 ms 348 KB Correct
5 Correct 2 ms 348 KB Correct
6 Correct 18 ms 504 KB Correct
7 Correct 1 ms 348 KB Correct
8 Correct 37 ms 348 KB Correct
9 Correct 45 ms 472 KB Correct
10 Correct 2 ms 604 KB Correct
11 Correct 12 ms 444 KB Correct
12 Correct 2 ms 348 KB Correct
13 Correct 5 ms 348 KB Correct
14 Correct 1 ms 348 KB Correct
15 Correct 2 ms 348 KB Correct
16 Correct 4 ms 436 KB Correct
17 Correct 3 ms 480 KB Correct
18 Correct 3 ms 348 KB Correct
19 Correct 1 ms 348 KB Correct
20 Correct 1 ms 348 KB Correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Correct
2 Execution timed out 2074 ms 5320 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Correct
2 Correct 0 ms 604 KB Correct
3 Correct 28 ms 5064 KB Correct
4 Correct 0 ms 344 KB Correct
5 Correct 33 ms 5296 KB Correct
6 Correct 41 ms 5292 KB Correct
7 Correct 0 ms 348 KB Correct
8 Correct 0 ms 348 KB Correct
9 Correct 9 ms 1544 KB Correct
10 Correct 0 ms 348 KB Correct
11 Execution timed out 2045 ms 5316 KB Time limit exceeded
12 Halted 0 ms 0 KB -