当前位置:网站首页>2022杭电多校第三场 K题 Taxi
2022杭电多校第三场 K题 Taxi
2022-08-05 00:18:00 【Rain Sure】
题目链接
题目大意
给定我们二维平面上的 n n n个点,我们从当前点 ( x , y ) (x, y) (x,y),前往第 i i i个点,会减少花费 m i n ( ( ∣ x − x i ∣ + ∣ y − y i ∣ ) , w i ) min((|x - x_i | + |y - y_i |), w_i) min((∣x−xi∣+∣y−yi∣),wi),给定我们 q q q个询问,每次给我们一个二维平面上的一个点,我们需要计算出最大的减少的花费。
题解
主要用到了一个神奇的转换,我也没遇到过,比赛的时候我队友告诉我的~
我们需要预处理出来所有点的四个最值,这样计算的时候就可以 O ( 1 ) O(1) O(1)的时间计算出来了。
我们根据每个点的 w w w值从小到大进行排序,然后二分标号,然后计算出来当前的最大距离 d d d,通过 d d d和 w w w进行判断,下一步去左边还是右边,需要注意的是我们需要在二分过程中记录最值。具体细节看代码,看代码会好理解一些。
代码
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);
const int maxn = 100010, inf = 1e18;
typedef struct node
{
int x, y, w;
bool operator < (const struct node &t) const{
return w < t.w;
}
}Node;
Node points[maxn];
int a[maxn], b[maxn], c[maxn], d[maxn];
int n, q;
int sx, sy;
int res;
bool check(int mid)
{
int t = -inf;
int w = points[mid].w;
t = max(t, sx + sy + a[mid]);
t = max(t, sx - sy + b[mid]);
t = max(t, -sx + sy + c[mid]);
t = max(t, -sx - sy + d[mid]);
res = max(res, min(w, t));
return w <= t;
}
signed main()
{
IOS;
int t; cin >> t;
while(t --){
cin >> n >> q;
for(int i = 0; i < n; i ++){
int x, y, w; cin >> x >> y >> w;
points[i] = {
x, y, w};
}
sort(points, points + n);
a[n] = b[n] = c[n] = d[n] = -inf;
for(int i = n - 1; i >= 0; i --){
a[i] = max(a[i + 1], -points[i].x - points[i].y);
b[i] = max(b[i + 1], -points[i].x + points[i].y);
c[i] = max(c[i + 1], points[i].x - points[i].y);
d[i] = max(d[i + 1], points[i].x + points[i].y);
}
while(q --){
res = -inf;
cin >> sx >> sy;
int l = 0, r = n - 1;
while(l < r){
int mid = l + r + 1 >> 1;
if(check(mid)) l = mid;
else r = mid - 1;;
}
check(l);
cout << res << endl;
}
}
return 0;
}
边栏推荐
猜你喜欢
Cloud native - Kubernetes 】 【 scheduling constraints
Senior game modelers tell newbies, what are the necessary software for game scene modelers?
英特尔WiFi 7产品将于2024年亮相 最高速度可达5.8Gbps
KT6368A Bluetooth certification problem_FCC and BQB_CE_KC certification or other instructions
2022牛客暑期多校训练营5(BCDFGHK)
Implementation principle of golang coroutine
倒计时1天!8月2日—4日与你聊聊开源与就业那些事!
golang 协程的实现原理
KT148A voice chip ic working principle and internal architecture description of the chip
could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
随机推荐
仿网易云音乐小程序-uniapp
性能测试如何准备测试数据
node使用redis
2022杭电多校 第三场 B题 Boss Rush
工业物联网 —— 新型数据库的召唤
After another 3 days, I have sorted out 90 NumPy examples, and I can't help but bookmark it!
找不到DiscoveryClient类型的Bean
在线中文姓名生成工具推荐
what?测试/开发程序员要被淘汰了?年龄40被砍到了32?一瞬间,有点缓不过神来......
10 个关于 Promise 和 setTimeout 知识的面试题,通过图解一次说透彻
First, the basic concept of reptiles
头脑风暴:完全背包
tiup update
中日颜色风格
[LeetCode] Summary of Matrix Simulation Related Topics
国内网站用香港服务器会被封吗?
2022杭电多校第一场 1004 Ball
E - Many Operations (按位考虑 + dp思想记录操作后的结果
Cython
Cython