[模拟]洛谷 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;
}
然后就过了?