2024年4月12日饿了么春招实习试题【第二题:魔法师】-题目+题解+在线评测【二分】

2024年4月12日饿了么春招实习试题【第二题:魔法师】-题目+题解+在线评测【二分】

  • 题目描述:
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 评测数据与规模
  • 解题思路一:
  • 解题思路二:
  • 解题思路三:动态规划

题目描述:

塔子哥是一名魔法师,他有一个由 n 个正整数组成的魔法序列 A。现在他想对这个序列施展魔法,每次施展魔法会给出三个正整数 l,r,k,塔子哥想知道在区间 [l,r] 中是否存在一个位置 i,使得将区间 [l,i] 中的所有数进行按位或运算的结果等于 k。如果存在,输出满足条件的最小的 i,否则输出 −1。

输入格式

第一行包含两个正整数 n,Q,表示魔法序列的长度和施展魔法的次数。

第二行包含 n 个正整数 A1,A2,…,An,表示魔法序列 A。

接下来 Q 行,每行包含三个正整数 l,r,k,表示一次魔法的施展。

输出格式

对于每次施展魔法,输出一行一个整数,表示答案,如果不存在满足条件的位置则输出 −1。

样例输入

5 5
3 2 3 3 6
1 2 3
1 5 7
1 4 7
2 2 2
2 3 7

样例输出

1
5
-1
2
-1

评测数据与规模

1 ≤ n , Q ≤ 1 0 6 , 1 ≤ l ≤ r ≤ n , 0 ≤ A _ i , k < 2 30 。 1 \le n,Q \le 10^6,1 \le l \le r \le n,0 \le A\_i, k < 2^{30}。 1n,Q1061lrn0A_i,k<230

OJ链接:
https://codefun2000.com/p/P1817

解题思路一:

在这里插入图片描述

import sys
input = lambda : sys.stdin.readline().strip()
n,q = map(int, input().split())
a = list(map(int, input().split()))
lb = [None] * (n + 1)
d = dict()
for i in range(n-1,-1,-1):d[a[i]] = i + 1nd = {}for k, v in d.items():nd[k|a[i]] = min(nd.get(k|a[i],n),v)d = ndlb[i + 1] = d.copy()
for _ in range(q):l,r,k = map(int, input().split())	if k not in lb[l] or r < lb[l][k]:print("-1")else:print(lb[l][k])

时间复杂度:O(nlogU + 1)
空间复杂度:O(nlogU)

解题思路二:

在这里插入图片描述

n, q = map(int, input().split())
a = list(map(int, input().split()))MAXBIT = 30
MAXV = 2**30 - 1
pre = [[0 for _ in range(MAXBIT)] for i in range(n + 1)]
for i in range(1, n + 1):for j in range(MAXBIT):pre[i][j] = pre[i - 1][j]if a[i - 1] >> j & 1:pre[i][j] += 1for i in range(q):l, r, k = map(int, input().split())if k > MAXV:print(-1)continuekbit = [0] * MAXBITfor j in range(MAXBIT):kbit[j] = k >> j & 1left, right = l, rwhile left < right:mid = (left + right) >> 1ok = Truefor j in range(MAXBIT):if kbit[j] == 1 and pre[mid][j] - pre[l - 1][j] == 0:ok = Falsebreakif ok:right = midelse:left = mid + 1ok = Truefor j in range(MAXBIT):if kbit[j] == 1 and pre[right][j] - pre[l - 1][j] == 0:ok = Falsebreakif kbit[j] == 0 and pre[right][j] - pre[l - 1][j] > 0:ok = Falsebreakif ok:print(right)else:print(-1)n, q = map(int, input().split())
a = list(map(int, input().split()))MAXBIT = 30
MAXV = 2**30 - 1
pre = [[0 for _ in range(MAXBIT)] for _ in range(n + 1)]
nxt = [[-1 for _ in range(MAXBIT)] for _ in range(n + 1)]
for i in range(1, n + 1):for j in range(MAXBIT):pre[i][j] = pre[i - 1][j]if a[i - 1] >> j & 1:pre[i][j] += 1for j in range(MAXBIT):for i in range(n, 0, -1):if a[i - 1] >> j & 1:nxt[i][j] = ielif i < n:nxt[i][j] = nxt[i + 1][j]for i in range(q):l, r, k = map(int, input().split())if k > MAXV:print(-1)continueok = Truepos = lfor j in range(MAXBIT):if k >> j & 1:if nxt[l][j] == -1 or nxt[l][j] > r:ok = Falsebreakpos = max(pos, nxt[l][j])if ok:v = 0for j in range(MAXBIT):if pre[pos][j] - pre[l - 1][j] > 0:v |= 1 << jif v != k:ok = Falseelse:print(pos)if not ok:print(-1)

时间复杂度:O(n)
空间复杂度:O(30q)

解题思路三:动态规划

n, q = map(int, input().split(' '))
f = [[n] * 30 for _ in range(n + 1)]
a = list(map(int, input().split(' '))) + [0]
for i in range(n - 1, -1, -1):for j in range(30):f[i][j] = i if (a[i] >> j & 1) == 1 else f[i + 1][j]
while q > 0:q -= 1l, r, k = map(int, input().split(' '))l, r = l - 1, r - 1mx, mn = -1, nfor j in range(30):if (k >> j & 1) == 1:mx = max(mx, f[l][j])else:mn = min(mn, f[l][j])if mx <= r and mx < mn:print(mx + 1)else:print(-1)

时间复杂度:O(n)
空间复杂度:O(n)

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

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

相关文章

斯坦福李飞飞最新对话:AI不会对人类造成“灭绝性危机” | 最新快讯

美国斯坦福大学教授、美国国家工程院院士李飞飞&#xff08;来源&#xff1a;斯坦福大学账号&#xff09; 北京时间 5 月 10 日凌晨举行的 Bloomberg Tech 活动上&#xff0c;著名华人计算机科学家、美国斯坦福大学教授李飞飞&#xff08;Fei-Fei Li&#xff09;与彭博社 Emily…

三星硬盘格式化后怎么恢复数据

在数字化时代&#xff0c;硬盘作为数据存储的核心部件&#xff0c;承载着我们的重要文件、照片、视频等资料。然而&#xff0c;不慎的格式化操作可能使我们失去宝贵的数据。面对这样的困境&#xff0c;许多用户可能会感到无助和焦虑。本文旨在为三星硬盘用户提供格式化后的数据…

【计算机网络】数据链路层的功能

数据链路层的基本功能&#xff1a; 封装成帧透明传输差错检测 数据链路层使用的信道主要有两种 点对点信道——PPP协议广播信道——CSMA/CD协议(有线局域网)、CSMA/CA协议(无线局域网) 数据链路层所处的地位 从图中可以看出&#xff0c;数据从主机H1送到主机H2需要在路径中…

【Java探索之旅】继承结构 继承和组合 protected final

文章目录 &#x1f4d1;前言一、继承1.1 继承关系的代码块1.2 protected关键字1.3 继承方式1.4 final关键字1.5 继承与组合 &#x1f324;️全篇总结 &#x1f4d1;前言 在面向对象编程中&#xff0c;继承是一种重要的概念&#xff0c;它允许我们创建一个新类&#xff0c;从现有…

树莓派realVNC分辨率不对

用putty进入树莓派 输入sudo raspi-config 找到第二个 里面有一个VNC resolution好像是这个&#xff0c;可以调节分辨率

有哪些是618必买的数码好物,这几款千万别错过

备受瞩目的618购物节即将拉开帷幕&#xff0c;身为数码领域的资深发烧友&#xff0c;我迫不及待地要为大家呈现一系列精心挑选的数码产品。无论您是热衷于追求科技尖端的先锋者&#xff0c;还是希望用智能设备为生活增添一抹亮色的品味人士&#xff0c;这里总有一款能让您心动的…

如何将一个VPS上的网站全部迁移至另外一个VPS服务器

最近我们老的VPS即将到期&#xff0c;由于近期Hostease的VPS活动力度较大&#xff0c;我们购买了Hostease的VPS&#xff0c;购买后需要将原服务器的所有网站迁移到Hostease提供的VPS中。在Hostease技术人员的帮助下&#xff0c;我们成功进行了迁移&#xff0c;下面我就介绍此次…

Vue常用指令修饰符

指令修饰符 什么是指令修饰符&#xff1f;按键修饰符v-model修饰符事件修饰符 什么是指令修饰符&#xff1f; ​所谓指令修饰符就是通过“.”指明一些指令后缀&#xff0c; 不同的后缀封装了不同的处理操作 —> 简化代码 按键修饰符 keyup.enter —>当点击enter键的时…

用大于meilisearch-java-0.7.0.jar的报错的解决

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

【Android】Kotlin学习之Kotlin方法的声明和传参

方法声明 普通类的方法 静态类的方法 不需要构建实例对象, 可以通过类名直接访问静态方法 : NumUtil.double(1) companion object 伴生类的方法 使用companion object 在普通类里定义静态方法 参数 括号内传入方法 : 当参数是方法时, 并且是最后一个参数 , 可以使用括号外…

李宏毅-注意力机制详解

原视频链接&#xff1a;attention 一. 基本问题分析 1. 模型的input 无论是预测视频观看人数还是图像处理&#xff0c;输入都可以看作是一个向量&#xff0c;输出是一个数值或类别。然而&#xff0c;若输入是一系列向量&#xff0c;长度可能会不同&#xff0c;例如把句子里的…

39-5 入侵检测系统(IDS)- 安装配置IDS(注意我没安装成功,阅读需谨慎)

官网:Snort Rules and IDS Software Download 参考: (这位大佬分享了安装包下载链接):https://www.cnblogs.com/taoyuanming/p/12722263.html (安装过程参考这位大佬):Snort 安装与配置(CentOS 7)_centos 7 snort-CSDN博客一、安装 IDS(我这里在 CentOS 7 虚拟机中安…

小红书·电商运营课:小红书开店流程,小红书电商如何运营(18节视频课)

课程目录 第1节课:学习流程以及后续实操流程注意事项 第2节课:小红书店铺类型解析以及开店细节 第3节课:小红书电商运营两种玩法之多品店铺解析 第4节课:小红书电商运营两种玩法之单品店铺解析 第5节课:选品课(多品类类目推荐) 第6节课:选品课(多品类类目推荐) 第7节课:…

CSS 网格布局一行X个排列

<div class"icon-box"><divv-for"(item,index) in icon" :key"index" class"icon"style"cursor: pointer">{{item}}</div></div>.icon-box{display: grid; /**网格布局*/grid-template-columns: r…

Java 常见集合类

集合的整体框架 Java 的集合&#xff0c;也可以叫做容器&#xff0c;根据集合的整体框架可以看出&#xff0c;主要是两大集合接口&#xff1a;第一个是 Collection 接口&#xff0c;主要用来存放单一的元素对象&#xff1b;另一个是 Map 接口&#xff0c;主要用于存储键值对。…

国产版Sora到来!视频大模型更上一层楼

大模型的快节奏发展&#xff0c;让了解最新技术动态、积极主动学习成为每一位从业者的必修课。InfoQ 研究中心期望通过每周更新大模型行业最新动态&#xff0c;为广大读者提供全面的行业回顾和要点分析。现在&#xff0c;让我们回顾过去一周的大模型重大事件吧。 一、重点发现…

词令蚂蚁新村今日答案:微信小程序怎么查看蚂蚁新村今天问题的正确答案?

微信小程序怎么查看蚂蚁新村今天问题的正确答案&#xff1f; 1、打开微信&#xff0c;点击搜索框&#xff1b; 2、打开搜索页面&#xff0c;选择小程序搜索&#xff1b; 3、在搜索框&#xff0c;输入词令搜索点击进入词令微信小程序&#xff1b; 4、打开词令微信小程序关键词口…

利用一下Chat-GPT写两段处理字符串的简单样例ABAP程序。这样可以大大提高工作效率。Chat-GPT的能力真是让人震撼。

我让Caht-GPT写两段ABAP 程序&#xff0c;第一段程序要求如下&#xff1a; 判读字符串里面是否含有特殊字符&#xff0c;这里说的特殊字符不包括键盘上能够输入的字符&#xff0c;如果有这样的特殊字符则输出来。 DATA: lv_string TYPE string VALUE 你的字符串,lv_result TYP…

算法金 | Xorbits,一个超强的 Python 库

本文来源公众号“算法金”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;Xorbits&#xff0c;一个超强的 Python 库 1 Xorbits 库介绍 在数据科学和机器学习的世界里&#xff0c;处理大规模数据集和复杂计算的需求日益增长。 这…

【Go】Go Swagger 生成和转 openapi 3.0.3

本文档主要描述在 gin 框架下用 gin-swagger 生成 swagger.json 的内容&#xff0c;中间猜的坑。以及&#xff0c;如何把 swagger 2.0 转成 openapi 3.0.3 下面操作均在项目根目录下执行 生成 swagger 2.0 import swagger go get -u github.com/swaggo/gin-swagger go get …