当前位置:网站首页>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;
}
边栏推荐
- [CVA Valuation Training Camp] Financial Modeling Guide - Lecture 1
- 看图识字,DELL SC4020 / SCv2000 控制器更换过程
- Cython
- leetcode:266. 回文全排列
- 软件测试面试题:您以往所从事的软件测试工作中,是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,请结合该工具描述软件缺陷(Bug)跟踪管理的流程?
- 关于使用read table 语句
- .net (C#) get year month day between two dates
- 矩阵数学原理
- 软件测试面试题:请你分别画出 OSI 的七层网络结构图和 TCP/IP 的四层结构图?
- 找不到DiscoveryClient类型的Bean
猜你喜欢
could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
What is next-generation modeling (with learning materials)
Mysql_13 事务
导入JankStats检测卡帧库遇到问题记录
Modelers experience sharing: model study method
测试经理要不要做测试执行?
MAUI Blazor 权限经验分享 (定位,使用相机)
KT148A voice chip ic working principle and internal architecture description of the chip
英特尔WiFi 7产品将于2024年亮相 最高速度可达5.8Gbps
The master teaches you the 3D real-time character production process, the game modeling process sharing
随机推荐
手写分布式配置中心(1)
typeScript - Partially apply a function
what is MVCC
数据类型及输入输出初探(C语言)
软件测试面试题:请你分别画出 OSI 的七层网络结构图和 TCP/IP 的四层结构图?
Some thoughts on writing
典型相关分析CCA计算过程
tiup update
2022多校第二场 K题 Link with Bracket Sequence I
【LeetCode】双指针题解汇总
How to burn the KT148A voice chip into the chip through the serial port and the tools on the computer
tiup telemetry
Getting started with 3D modeling for games, what modeling software can I choose?
SQL association table update
软件测试面试题:您以往所从事的软件测试工作中,是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,请结合该工具描述软件缺陷(Bug)跟踪管理的流程?
2 用D435i运行VINS-fusion
网站最终产品页使用单一入口还是多入口?
软件测试面试题:负载测试、容量测试、强度测试的区别?
Mysql based
数据类型-整型(C语言)