[模拟]洛谷 P11854 宴会

疑惑,不知道怎么上的绿题,也不知道为什么标签有二分 qwq

大概就是给你数轴上的 n 个点,求一个位置,使得 \(\max(\lvert x - x_i | + t_i)\) 最小。

瞪眼法看出来正常没 t 的话就是中点。那么加上之后我们就要枚举一个最小的 l 和最大的 r 然后求中点(感性理解)。

然后加的这个 \(t_i\) 相当于让点左移或右移一段距离,所以分别在枚举最终的左右端点处理即可。

#include <bits/stdc++.h>

#define ri register int
#define N 100005
#define inf 0x3f3f3f3f

int n , x[N] , t[N];
namespace P11852 {
	using namespace std;
	int l , r;
	void solve() {
		cin >> n;
		l = inf , r = -inf;
		for(ri i = 1 ; i <= n; ++i) {
			cin >> x[i]; l = min(l , x[i]) , r = max(r , x[i]);
		}
		for(ri i = 1 ; i <= n; ++i) {
			cin >> t[i];
			l = min(l , x[i] - t[i]);
			r = max(r , x[i] + t[i]);
		}
		
		cout << (l + r) * 1.0  / 2 <<'\n';
	}
}
int main()
{
	int t; std :: cin >>t;
	while(t--) {
		P11852 :: solve();
	}
	return 0;
}

然后就过了?

posted @ 2025-03-13 21:27  「癔症」  阅读(22)  评论(0)    收藏  举报