当前位置:网站首页>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;
}
边栏推荐
猜你喜欢

How to automatically push my new articles to my fans (very simple, can't learn to hit me)

三、实战---爬取百度指定词条所对应的结果页面(一个简单的页面采集器)
![[CVA Valuation Training Camp] Financial Modeling Guide - Lecture 1](/img/8b/360df9a9094037dc358cb21c60cdc8.png)
[CVA Valuation Training Camp] Financial Modeling Guide - Lecture 1

【论文笔记】—低照度图像增强—Unsupervised—EnlightenGAN—2019-TIP

仿网易云音乐小程序-uniapp

统计单词(DAY 101)华中科技大学考研机试题

First, the basic concept of reptiles

MongoDB permission verification is turned on and mongoose database configuration

oracle创建用户以后的权限问题

【LeetCode】图解 904. 水果成篮
随机推荐
How to burn the KT148A voice chip into the chip through the serial port and the tools on the computer
[idea] idea configures sql formatting
Statistical words (DAY 101) Huazhong University of Science and Technology postgraduate examination questions
怎样进行在不改变主线程执行的时候,进行日志的记录
国内网站用香港服务器会被封吗?
2022 Niu Ke Summer Multi-School Training Camp 5 (BCDFGHK)
About I double-checked and reviewed the About staff page, returning an industry question
IDEA 文件编码修改
#yyds dry goods inventory #Switching equipment serious packet loss troubleshooting
图解 Canvas 入门
The applicable scenarios and common product types of the KT148A electronic voice chip ic solution
After another 3 days, I have sorted out 90 NumPy examples, and I can't help but bookmark it!
一、爬虫基本概念
jenkins发送邮件系统配置
日志(logging模块)
隐私计算综述
2022牛客暑期多校训练营5(BCDFGHK)
Will domestic websites use Hong Kong servers be blocked?
【idea】idea配置sql格式化
Couple Holding Hands [Greedy & Abstract]