求调 wa
查看原帖
求调 wa
702161
abcaawtq楼主2024/10/3 11:43
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 200005;
int a[N], f[N], d[N];
int t, n, m, k;
void solve(){
	cin >> n >> m >> k;
	int maxn1 = -1,maxn2 = -1,x,y,cnt = 0;
	for(int i = 1; i <= n; i ++) cin >> a[i];
	for(int i = 1; i <= m; i ++) cin >> d[i];
	for(int i = 1; i <= k; i ++) cin >> f[i];
	for(int i = 2; i <= n; i ++){
		if(a[i] - a[i - 1] > maxn1){
			maxn1 = a[i] - a[i - 1];
			x = i - 1,y = i;
		}
	}
	for(int i = 2; i <= n; i ++){
		if(a[i] - a[i - 1] == maxn1) cnt ++;
	}
	if(cnt > 1){
		cout << maxn1 << endl ;
		return ;
	}
	int ans = 0;
	sort(a + 1, a + n + 1);
	sort(d + 1, d + m + 1);
	sort(f + 1, f + k + 1);
	for(int i = 1; i <= m; i ++){
		int t = a[y] + a[x] >> 1; 
		int l = lower_bound(f + 1, f + k + 1, t - d[i]) - f,
			r = upper_bound(f + 1, f + k + 1, t - d[i]) - f;
		int q = 0;
		if(l > 0 && l <= k && f[l] + d[i] <= a[y] && f[l] + d[i] >= a[x]){
			if(ans == 0) {
				ans = f[l] + d[i];
				continue;
			}
			if(max(a[y] - f[l] - d[i],f[l] + d[i] - a[x]) < max(a[y] - ans,ans - a[x])) ans = f[l] + d[i];
		}
		l = r;
		if(l > 0 && l <= k && f[l] + d[i] <= a[y] && f[l] + d[i] >= a[x]){
			if(ans == 0) {
				ans = f[l] + d[i];
				continue;
			}
			if(max(a[y] - f[l] - d[i],f[l] + d[i] - a[x]) < max(a[y] - ans,ans - a[x])) ans = f[l] + d[i];
		}
	}
	
	if(ans == 0){
		cout << maxn1 << endl ;
		return ;
	}
	a[++ n] = ans;
	sort(a + 1, a + n + 1);
	ans = -1;
	for(int i = 2; i <= n; i ++){
		ans = max(ans,a[i] - a[i - 1]);
	}
	cout << ans << endl ;
}
signed main(){
	cin >> t;
	while(t --) solve();
	return 0;
} 

悬关

2024/10/3 11:43
加载中...