Codeforces Round #477 C. Stairs and Elevators

news/2024/10/23 9:31:13/

Codeforces Round #477 

C. Stairs and Elevators

题目链接

题意:给你一栋高n层,每一层由m个部分组成,可以看成是一个矩阵划分成行和列。给你一cl,ce分别表示有个楼梯和电梯,然后给你一个v表示电梯的速度。接下来行表示每个电梯在对应楼 层的位置,在

接下来行表示对应电梯口的位置。然后有q个询问,每个询问包括一个起点和终点,问你从起点到终点的最短时间。

思路:这道题的坑点挺多的.....首先是特判起点和终点是否在同一层,如果在同一层直接走过去即可,不是同一层

的话,需要从起点开始,寻找最近的楼梯和电梯,分别计算用楼梯和电梯到达终点的,取最小值即可。注意边界的问题,还有就是用lower_bound()找出大于等于起点的楼梯电梯位置时,需要如果存在大于或小于这个位置的楼梯和电梯时,也要加入计算。

#include<bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
const int INF=2*int(1e9)+10;
#define LL long long
int numa[maxn],numb[maxn];
int main() {int n,m,a,b,v;cin>>n>>m>>a>>b>>v;for(int i=0; i<a; i++)scanf("%d",&numa[i]);for(int i=0; i<b; i++)scanf("%d",&numb[i]);sort(numa,numa+a);sort(numb,numb+b);int q,x1,y1,x2,y2;cin>>q;for(int i=1; i<=q; i++) {scanf("%d %d %d %d",&y1,&x1,&y2,&x2);if(y1==y2){printf("%d\n",abs(x2-x1));continue;}int posa=lower_bound(numa,numa+a,x1)-numa;        //找出刚好大于等于x1位置的楼梯的下标 int posb=lower_bound(numb,numb+b,x1)-numb;        //找出刚好大于等于x1位置的电梯的下标  if(posa==a)  //如果不存在,则最近的位置为最后那个楼梯的位置,若posa=-1,则表示不存在楼梯 posa=a-1;if(posb==b)//如果不存在,则最近的位置为最后那个电梯的位置,若posa=-1,则表示不存在楼梯 posb=b-1;int Mina=INF;int Minb=INF;if(posa!=-1) {int mina=abs(numa[posa]-x1);Mina=mina+abs(y2-y1)+abs(x2-numa[posa]);  //计算使用posa位置的楼梯 if(posa-1>=0){        //计算使用posa-1位置的楼梯 Mina=min(Mina,abs(x1-numa[posa-1])+abs(y2-y1)+abs(x2-numa[posa-1]));}if(posa+1<a){        //计算使用posa+1位置的楼梯 Mina=min(Mina,abs(x1-numa[posa+1])+abs(y2-y1)+abs(x2-numa[posa+1]));}}if(posb!=-1) {int minb=abs(numb[posb]-x1);  //计算使用posb位置的电梯 Minb=minb+abs(y2-y1)/v+abs(x2-numb[posb]);if(posb-1>=0){        //计算使用posb-1位置的电梯Minb=min(Minb,abs(x1-numb[posb-1])+abs(y2-y1)/v+abs(x2-numb[posb-1]));}if(posb+1<b){         //计算使用posb-1位置的电梯Minb=min(Minb,abs(x1-numb[posb+1])+abs(y2-y1)/v+abs(x2-numb[posb+1]));}if(abs(y2-y1)%v!=0)   Minb++;}int Min=min(Mina,Minb);printf("%d\n",Min);}return 0;
}



http://www.ppmy.cn/news/535627.html

相关文章

[477]tf.reduce_mean()

tf.reduce_mean 函数用于计算张量tensor沿着指定的数轴&#xff08;tensor的某一维度&#xff09;上的的平均值&#xff0c;主要用作降维或者计算tensor&#xff08;图像&#xff09;的平均值。 reduce_mean(input_tensor,axisNone,keep_dimsFalse,nameNone,reduction_indices…

LeetCode_位运算_中等_477.汉明距离总和

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 两个整数的汉明距离指的是这两个数字的二进制数对应位不同的数量。 给你一个整数数组 nums&#xff0c;请你计算并返回 nums 中任意两个数之间汉明距离的总和。 示例 1&#xff1a; 输入&#xff1a;nums …

LeetCode | 477. Total Hamming Distance

题目 The Hamming distance between two integers is the number of positions at which the corresponding bits are different. Given an integer array nums, return the sum of Hamming distances between all the pairs of the integers in nums. Example 1: Input: n…

【博客477】prometheus-----数值数据编码(varint与zigzag)

prometheus-----数据编码(varint与zigzag) prometheus对数值数据进行编码时&#xff0c;使用到了varint与zigzag varint与zigzag编码方法在protobuf中也被使用 prometheus encoding代码&#xff1a; https://github.com/prometheus/prometheus/blob/main/tsdb/encoding/encodi…

​LeetCode刷题实战477:汉明距离总和

算法的重要性&#xff0c;我就不多说了吧&#xff0c;想去大厂&#xff0c;就必须要经过基础知识和业务逻辑面试算法面试。所以&#xff0c;为了提高大家的算法能力&#xff0c;这个公众号后续每天带大家做一道算法题&#xff0c;题目就从LeetCode上面选 &#xff01; 今天和大…

LeetCode 算法 每日一题 477.汉明距离总和

10.正则表达式匹配 题目描述 两个整数的汉明距离指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中&#xff0c;任意两个数之间汉明距离的总和。 示例1 输入: 4, 14, 2 输出: 6 解释: 在二进制表示中&#xff0c;4表示为0100&#xff0c;14表示为1110&#xff0…

奇舞周刊 477 期:一文弄懂 React ref 原理

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 一文弄懂 React ref 原理 对于 Ref 理解与使用&#xff0c;一些读者可能还停留在用 ref 获取真实 DOM 元素和获取类组件实例层面上 其实 ref 除了这两项常用功能之外&#xff0c;还…

Java实现 LeetCode 477 汉明距离总和

477. 汉明距离总和 两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中&#xff0c;任意两个数之间汉明距离的总和。 示例: 输入: 4, 14, 2 输出: 6 解释: 在二进制表示中&#xff0c;4表示为0100&#xff0c;14表示为1110&#xff0c;2表…