蓝桥杯刷题017——轨道炮(贪心)

news2024/9/24 13:21:12

2019国赛轨道炮

题目描述

小明在玩一款战争游戏。地图上一共有 N 个敌方单位,可以看作 2D 平面上的点。其中第 i 个单位在 0 时刻的位置是 (Xi​,Yi​)方向是 Di​ (上下左右之一, 用'U'/'D'/'L'/'R' 表示),速度是 Vi​。

小明的武器是轨道炮,只能使用一次,不过杀伤力巨大。小明可以选择在某个非负整数时刻释放轨道炮,轨道炮一次可以消灭在一条直线 (平行于坐标轴)上的所有敌方单位。

请你计算小明最多能消灭多少敌方单位。

输入描述

输入第一行包含一个整数 N。

以下 N 行每行包含 3 个整数 Xi​,Yi​,Vi​,以及一个大写字符 Di​。

其中,1≤N≤1000,−10^6≤Xi​,Yi​≤10^6,0≤Vi​≤10^6。

输出描述

输出一个整数代表答案。

输入输出样例

输入

4
0 0 1 R
0 10 1 R
10 10 2 D
2 3 2 L

输出

3

题目大意:

平面上有N个点分别向上,下,左,右四个方向移动,每个点有速度v求解最多会有几个点会在同一行或同一列上(即纵坐标或横坐标相同)

题目样例图示如下,x轴上的两个点永远在同一行上,向下走的点在某一时刻也会到达x轴,这样最多有3个点在同一直线上。
 

每一个点有横纵坐标,速度,运动方向,这些信息如何存储?

创建两个列表存储每个点的横坐标和纵坐标(也可以创建一个列表,每个子列表存储每个点的坐标) ,两个列表存储每个点在横方向的速度和在纵方向的速度

X:[ ]        存储每个点的横坐标
Y:[ ]        存储每个点的纵坐标
vx:[ ]       存储每个点在横方向的速度(没有则为0)
vy:[ ]       存储每个点在纵方向的速度(没有则为0)

速度需要规定方向

  • 设定x方向向右为正,向左为负
  • 设定y方向向上为正,向下为负

难点︰如何求解最多会有几个点横/纵坐标相同

依次锁定每个点,看看在所有时刻中,它最多会和几个点横/纵坐标相同
依次计算锁定每个点后,取最大值即为最终结果

举例:有4个点
锁定1号:2个

锁定2号:1个

锁定3号:2个

锁定4号:3个

答案:3

锁定了一个点,如何计算最多的横/纵坐标相同点数?

做法:遍历其他所有点,首先判断它们是否会在某一时刻处于同一行/列
如果会,利用速度差\Delta v和距离差\Delta x/\Delta y,计算出同x/y的时刻t(例如下图①和②)

1、计算横坐标时,判断的是横坐标相同情况(同列) 

t=相对距离\Delta x//相对速度\Delta v(余数为0是才可能同x/y)

  • 相反方向:t = \frac{x_1-x_2}{v_2-v_1}

  • 相同方向: t = \frac{x_1-x_2}{v_2-v_1}

  

还有一部分点,永远和锁定的点处于同行/列。(例如下图②和③)这个要另外处理,因为分母\Delta v=0


2、计算纵坐标时,判断的是纵坐标相同情况(同行)

同上面计算横坐标的方法。

如何记录某一时刻t对应的同x/y的点数?

  • 用一个字典d记录每个点和锁定点同心/y的时刻t(字典d的键),然后d[t]+=1(默认空时是0),即可记录时刻t同x/y的点数(字典的值)
  • 有一部分点因为始终与锁定点同x/y,因此另外用一个变量always记录(不存在字典中,因为计算t时分母不能是0)计算一个坐标方向时,定义一个记录最大点数的变量mx,每个锁定点计算完时,从字典中获取最大的值+always,更新最大值。
  • 贪心思想:我们锁定每一个点,求它最多会和几个点共线,然后再找所有点的同x/y时刻t的点数的最大值。
  • 时间复杂度:O(n^2)
  • 最后对横纵坐标分别计算,取二者较大值,即为结果。

 代码:

n =int(input())
N = 1010
X = [0] * N; Y = [0] * N
vx = [0] * N; vy = [0] * N
for i in range(n):
    w = input().split()  # 每一点的x和y
    cx = int(w[0]); cy = int(w[1])
    X[i] = cx; Y[i] = cy 
    v = int(w[2])        # 每一点的速度
    # 四个方向
    if w[3] == 'U':
        vy[i] = v
    elif w[3] == 'D':
        vy[i] = -v
    elif w[3] == 'R':
        vx[i] = v
    elif w[3] == 'L':
        vx[i] = -v

def cal(P, v):
    mx = 0
    for i in range(n):
        d = {}              # 存储同x/y时刻t的点数
        aimx = P[i]; aimv = v[i]
        always = 1          # 始终与锁定点同x/y,锁定点本身就是一个,所以初始化为always = 1,
        for j in range(n):
            if i == j: continue     # 排除和自己的情况
            dx = aimx - P[j]        # 相对位置dx
            dv = v[j] - aimv        # 相对速度dv
            if dv == 0:             # 如果相对速度为0
                if dx == 0:         # 如果是始终与锁定点同x/y
                    always += 1
                mx = max(mx, always) # 更新时刻t的最大值
            else:                   # 相对速度不为0
                t = dx // dv        # 求出同x/y时刻t
                if dx % dv or t < 0:# 排除余数不为0或者时刻t<0
                    continue
                d[t] = d.get(t, 0) + 1          # 同x/y时刻t的点数+1
                mx = max(mx, d[t] + always)     # 更新时刻t的最大值
    return mx

res = max(cal(X, vx), cal(Y, vy))   # 取同x/y时刻t的点数的最大值就是结果
print(res)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我来告诉你,ChatGPT 该怎么对接到自己的项目中!

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 1. 项目介绍 《ChatGPT AI 问答助手》 开源免费项目&#xff0c;涵盖爬虫接口、ChatGPT API对接、DDD架构设计、镜像打包、Dock…

六十年间中国经济总量增长245倍

中国GDP&#xff08;现价美元&#xff09;走势图回顾2022年&#xff0c;中国经济顶住了来自防控疫情及国际变化的巨大压力&#xff0c;全年GDP实现3%的同比增长&#xff0c;其中年末冬季GDP同比增长2.9%。从主要指标显示&#xff0c;12月第三产业、投资、地产都有不同程度的改善…

HTB_Base_php弱类型与find命令提权

至此&#xff0c;startpoint部分就完成了&#xff0c;也初步建立的渗透测试的思路和体系 温故而知新&#xff0c;可以为师矣 文章目录信息收集php弱类型 & strcmp绕过GTFOBins 二进制常用命令find提权信息收集 nmap -sC -A -Pn ip开放端口22、80 dirsearch 扫描目录&…

一文5000字手把手教你使用jenkins搭建一个中小企业前端项目部署环境

本文你能学到什么? 传统发布和现在发布的对比和区别 项目案例-手动上传服务器&#xff0c;使用jenkins上传服务器 配置不同的发布环境 配置域名 配置https 配置钉钉机器人通知【文末有配套资源领取】 服务器购买&#xff1a;抢占式实例 Jenkins 安装 示例服务器为 阿里…

系统移植 tf-a

1、从ST官网下载TF-A源码&#xff0c;将TF-A源码拷贝到ubuntu中并进行解压。 2、进入tf-a源码&#xff0c;阅读README.HOW_TO.txt帮助文档。 3、分析帮助文档。 分析文档可得&#xff0c;移植tf-a到开发板中步骤为&#xff1a;对tf-a源码进行解压&#xff1b;打补丁&#xff…

ElasticSearch从入门到出门【上】

文章目录初识elasticsearch了解ESelasticsearch的作用ELK技术栈elasticsearch和lucene为什么不是其他搜索技术&#xff1f;倒排索引正向索引倒排索引正向和倒排ES的一些概念文档和字段索引和映射mysql与elasticsearch安装elasticsearch部署单点es部署kibana安装IK分词器在线安装…

SpringBoot 使用自定义的方式整合Druid数据源(powernode document)(内含源代码)

SpringBoot 使用自定义的方式整合Druid数据源&#xff08;powernode document&#xff09;&#xff08;内含源代码&#xff09; 源代码下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87404561 目录SpringBoot 使用自定义的方式整合Druid数据源…

SQLSERVER 的 nolock 到底是怎样的无锁?

一&#xff1a;背景 1. 讲故事 相信绝大部分用 SQLSERVER 作为底层存储的程序员都知道 nolock 关键词&#xff0c;即使当时不知道也会在踩过若干阻塞坑之后果断的加上 nolock&#xff0c;但这玩意有什么注意事项呢&#xff1f;这就需要了解它的底层原理了。 二&#xff1a;n…

python之np.sum()用法详解

python库numpy提供的求和方法np.sum()&#xff0c;可以对数组和矩阵进行求和。sum方法可以接收多个参数&#xff0c;主要是数组a,坐标轴axis,数据类型dtype,初始值initial。其中&#xff0c;axis对于我们来说比较容易迷糊&#xff0c;这个值对求和有什么影响&#xff1f;一般来…

Linux常用命令——rcp命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) rcp 使在两台Linux主机之间的文件复制操作更简单 补充说明 rcp命令使在两台Linux主机之间的文件复制操作更简单。通过适当的配置&#xff0c;在两台Linux主机之间复制文件而无需输入密码&#xff0c;就像本地文…

React基础入门(一)

1、React简介 官网 英文官网: https://reactjs.org/ 中文官网: https://react.docschina.org/ 描述介绍 用于动态构建用户界面的 JavaScript 库(只关注于视图) 由Facebook开源 React特点 1、声明式编码 2、组件化编码 3、React Native 编写原生应用 4、高效&#xff08;优秀…

苹果不小心删了照片怎么恢复?苹果照片删除后如何恢复

苹果不小心删了照片怎么恢复&#xff1f;请保持冷静&#xff0c;不要往mac中写入新的东西&#xff0c;以防丢失的照片被覆盖。接下来&#xff0c;我们一起来探讨一下mac照片恢复的技巧。 方法一、从“最近删除”文件夹中恢复照片 使用照片管理应用程序&#xff08;例如Mac上的…

百趣代谢组学分享Lip-SMap:绘制代谢物和蛋白相互作用图谱的新方法

百趣代谢组学文献分享&#xff0c;自2014年瑞士苏黎世联邦理工学院的Picotti和她的研究小组开始用Lip-SRM法测量复杂蛋白质混合物的大量结构改性蛋白质以来[1]&#xff1b;该研究小组随后对方法进行改进&#xff0c;研究了复杂细胞基质中几种生物蛋白质的热稳定性&#xff0c;并…

袁树雄和唐磊关系迎来转折,王勇把他们两个和杨语莲拉进一个群

自从《早安隆回》火爆全网之后&#xff0c;创作者袁树雄就遭遇各种非议&#xff0c;就是他的同行唐磊老师&#xff0c;也勇敢站出来点评。唐磊老师也是一名音乐人&#xff0c;当年他凭借《丁香花》&#xff0c;一夜之间响彻大江南北&#xff0c;成为了家喻户晓的大明星。 虽然唐…

1行Python代码识别车牌号码,轻松写一个停车场管理系统,YYDS

大家好&#xff0c;这里是程序员晚枫。 你家停车场的摄像头&#xff0c;是怎么识别出你的车牌的&#xff1f;今天我们一起来看一下~ 识别车牌 识别车牌的代码很简单&#xff0c;只需要1行代码&#xff0c;如下所示。&#x1f447; # pip install poocr import poocr# 可以填…

Day1 CF847 div3 vp A-E

Dashboard - Codeforces Round #847 (Div. 3) - Codeforces感觉想试试隔一天vp一场div3/4&#xff0c;那就试试吧本来想把F补完再写的&#xff0c;但是感觉有点晚了&#xff0c;那就将就一下吧&#xff0c;F有缘单独补&#xff0c;嘻今晚浅浅vp了一下&#xff0c;一鼓作气地打出…

聊聊如何利用apollo与druid整合实现数据源动态热切

前言 本文的素材来源与某次和朋友技术交流&#xff0c;当时朋友就跟我吐槽说apollo不如nacos好用&#xff0c;而且他们还因为apollo发生过一次线上事故。 故事的背景大概是如下 前阵子朋友部门的数据库发生宕机&#xff0c;导致业务无法正常操作&#xff0c;当时朋友他们数据…

【JavaEE进阶】锁的特性

目录 一、乐观锁&悲观锁 二、公平锁&非公平锁 三、可重入锁&非可重入锁 四、读写锁&互斥锁 互斥锁 读写锁 读写锁涉及的类:ReentrantReadWriteLock 读写锁的优势: 五、轻量级锁&重量级锁 六、CAS ①基于CAS实现原子类 下面&#xff0c;来一段CAS的伪…

举个栗子~Tableau 技巧(250):创建 KPI 指标突出显示表

上一个栗子发出后&#xff0c;有数据粉反馈&#xff1a;有什么办法可以让全年的销售数据分层显示哇&#xff1f;业绩表现好、一般和差的分别使用不同的底色。 这个需求&#xff0c;如果考核的是名次&#xff0c;可以使用 &#x1f330; 用颜色突出显示前N项(TopN)和后N项(Bott…

samba设置文件共享

前提说明本人使用的系统如下共享文件的系统&#xff1a;ubuntu 版本&#xff1a;18.04.6目标系统&#xff1a;windows11安装sambasudo apt-get install samba修改配置文件sudo vim /etc/samba/smb.conf文件末尾添加以下内容[share] # 共享的名称&#xff0c;可以自行定义 c…