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 + 1
	nd = {}
	for k, v in d.items():
		nd[k|a[i]] = min(nd.get(k|a[i],n),v)
	d = nd
	lb[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] += 1


for i in range(q):
    l, r, k = map(int, input().split())
    if k > MAXV:
        print(-1)
        continue

    kbit = [0] * MAXBIT
    for j in range(MAXBIT):
        kbit[j] = k >> j & 1

    left, right = l, r
    while left < right:
        mid = (left + right) >> 1
        ok = True
        for j in range(MAXBIT):
            if kbit[j] == 1 and pre[mid][j] - pre[l - 1][j] == 0:
                ok = False
                break
        if ok:
            right = mid
        else:
            left = mid + 1

    ok = True
    for j in range(MAXBIT):
        if kbit[j] == 1 and pre[right][j] - pre[l - 1][j] == 0:
            ok = False
            break
        if kbit[j] == 0 and pre[right][j] - pre[l - 1][j] > 0:
            ok = False
            break
    if 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] += 1

for j in range(MAXBIT):
    for i in range(n, 0, -1):
        if a[i - 1] >> j & 1:
            nxt[i][j] = i
        elif 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)
        continue

    ok = True
    pos = l
    for j in range(MAXBIT):
        if k >> j & 1:
            if nxt[l][j] == -1 or nxt[l][j] > r:
                ok = False
                break
            pos = max(pos, nxt[l][j])

    if ok:
        v = 0
        for j in range(MAXBIT):
            if pre[pos][j] - pre[l - 1][j] > 0:
                v |= 1 << j
        if v != k:
            ok = False
        else:
            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 -= 1
    l, r, k = map(int, input().split(' '))
    l, r = l - 1, r - 1
    mx, mn = -1, n
    for 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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅谈运维数据安全

在数字化日益深入的今天&#xff0c;运维数据安全已经成为企业信息安全体系中的核心要素。运维工作涉及到企业信息系统的各个方面&#xff0c;从硬件维护到软件升级&#xff0c;从网络配置到数据备份&#xff0c;无一不需要严谨的数据安全保障措施。本文将从运维数据安全的重要…

抖音小店入驻后,完成这个步骤,出单几率会大大提升

哈喽~我是电商月月 抖音小店的运营过程中&#xff0c;最重要的就是选品&#xff0c;好品自带流量 但在商品正式上架前一定要做好这些设置的基础搭建&#xff0c;这些工作没做好&#xff0c;商品再好&#xff0c;我们的店铺也是不会有大流量和曝光的 那到底是哪些设置&#x…

iOS性能指标和性能测试工具

一&#xff1a; iOS性能测试指标 作为一名软件测试工程师&#xff0c;在测试 iOS 应用的性能时&#xff0c;需要关注以下几个方面&#xff1a; 1. 响应时间&#xff1a;应用的启动时间、页面加载速度、接口响应时间等。 2. CPU 使用率&#xff1a;应用在各种操作下的 CPU 占…

基于Qt的Model-View显示树形数据

目标 用qt的模型-视图框架实现树型层次节点的显示&#xff0c;从QAbstractItemModel派生自己的模型类MyTreeItemModel&#xff0c;用boost::property_tree::ptree操作树型数据结构&#xff0c;为了演示&#xff0c;此处只实现了个只读的模型 MyTreeItemModel的定义 #pragma o…

设计模式-创建型-原型模式-prototype

工作经验类 public class WorkExperience implements Cloneable {private String workDate;private String company;public void setWorkDate(String workDate) {this.workDate workDate;}public void setCompany(String company) {this.company company;}Overridepublic Ob…

品鉴中的个人风格:如何形成自己与众不同的红酒品鉴体验

品鉴云仓酒庄雷盛红酒不仅是一种感官体验&#xff0c;更是一种个人风格的展现。每个人都有自己与众不同的品味和偏好&#xff0c;通过品鉴红酒&#xff0c;我们可以形成自己与众不同的红酒品鉴体验。 要形成自己与众不同的红酒品鉴体验&#xff0c;首先需要勇于尝试不同类型的红…

返回分类信息(带层级)

文章目录 1.前端展示分类管理信息1.目前项目架构2.启动前后端项目1.启动mysql容器2.启动后端 renren-fast3.启动前端1.界面2.用户名密码都是admin 3.创建分类管理菜单1.菜单管理 -> 新增 -> 新增目录2.刷新3.能够新增菜单的原因是前端脚手架与renren-fast后端脚手架通信&…

Python大数据分析——Logistic回归模型

Logistic回归模型 概念理论分析模型评估混淆矩阵ROC曲线KS曲线 函数示例 概念 之前的回归的变量是连续的数值变量&#xff1b;而Logistics回归是二元离散值&#xff0c;用来解决二分类问题。 理论分析 上式中的hβ(X)也被称为Loqistic回归模型&#xff0c;它是将线性回归模型…

LagentAgentLego智能体工具使用

1. lagent 参考文档 https://github.com/InternLM/Tutorial/blob/camp2/agent/lagent.md 使用 LMDeploy 部署 conda activate agent lmdeploy serve api_server /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b \--server-name 127.0.0.1 \--model-name in…

深度学习:基于人工神经网络ANN的降雨预测

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 本专栏涉及创建深度学习模型、处理非结构化数据以及指导复杂的模型&#xff0c;如卷积神经网络(CNN)、递归神经网络 (RNN)&#xff0c;包括长短期记忆 (LSTM) 、门控循环单元 (GRU)、自动编码器 (AE)、受限玻尔兹曼机(…

数学学习笔记1——二次函数中的数形结合

二次函数中的数形结合 一、解一元二次不等式 基本方法&#xff1a;配方。 x 2 − 4 x 3 < 0 → ( x − 2 ) 2 < 1 → ∣ x − 2 ∣ < 1 → 1 < x < 3 x^2-4x3<0\to(x-2)^2<1\to\lvert x-2\rvert<1\to1<x<3 x2−4x3<0→(x−2)2<1→∣x−…

JDBC调用MogDB存储过程返回ref_cursor的方法和注意事项

MogDB在处理存储过程的时候&#xff0c;有时候需要返回结果集&#xff0c;类型为ref_cursor&#xff0c;但有时候可能会报错。而大部分应用程序都是使用Java JDBC. 根据我们这几年的数据库国产化改造经验&#xff0c;给大家分享一下JDBC调用 MogDB存储过程返回ref_cursor的方法…

【软考】模拟考卷错题本2024-05-11

1 设计模式- 适配器模式 基本上上述的图解已经涵盖了绝大多数主流的设计模式和其特点。理解记忆下即可&#xff0c;这里对下午的考题也有帮助的。 2 计算机组成原理 cpu 访问速度 这个真的是憨憨咯~看到内存就选内存&#xff0c;题目都没审好。这里的速度比cpu内部的要比外部的…

2024数维杯数学建模B题生物质和煤共热解问题的研究原创论文分享

大家好&#xff0c;从昨天肝到现在&#xff0c;终于完成了2024数维杯数学建模挑战赛B题的完整论文啦。 实在精力有限&#xff0c;具体的讲解大家可以去讲解视频&#xff1a; 2024数维杯数学建模B题煤共热解每一问高质量完整代码讲解&#xff01;_哔哩哔哩_bilibili 2024数维杯…

【初阶数据结构】单链表基础OJ题讲解

前言 &#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;正在学习C/C&#xff0c;Linux及MySQL。 &#x1f4da;本文收录与初阶数据结构系列&#xff0c;本专栏主要是针对时间、空间复杂度&#xff0c;顺序表和链表、栈和队列、二叉树以及各类排序算法&#xff0c;持…

找不到或无法加载主类 com.ruoyi.RuoYiApplication

若依项目&#xff0c;很久不启动&#xff0c;莫名其妙报错 找不到或无法加载主类 com.ruoyi.RuoYiApplication 解决方式 参考文章 找不到或无法加载主类_错误: 找不到或无法加载主类 com.ruoyi.ruoyiapplication-CSDN博客

LeetCode 106.从中序与后序遍历序列构造二叉树

LeetCode 106.从中序与后序遍历序列构造二叉树 1、题目 题目链接&#xff1a;106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并…

2 GPIO控制

ESP32的GPIO的模式&#xff0c;一共有输入和输出模式两类。其中输入模式&#xff1a;上拉输入、下拉输入、浮空输入、模拟输入&#xff1b;输出模式&#xff1a;输出模式、开漏输出&#xff08;跟stm32八种输入输出模式有所不同&#xff09;。库函数中控制引脚的函数如下&#…

软件测试基础知识必备之浅谈单元测试

什么是单元测试&#xff1f; 单元测试是指&#xff0c;对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&#xff0c;这里的最小可测试单元通常是指函数或者类。 单元测试都是以自动化的方式执行&#xff0c;所以在大量回归测试的场景下更能带来…

Transformer模型详解03-Self-Attention(自注意力机制)

文章目录 简介基础知识什么是AttentionSelf Attention原理通俗易懂理解矩阵计算Q&#xff0c;K&#xff0c;V计算Self-Attention 的输出 优势 Multi-head self-attention原理通俗易懂理解矩阵计算代码实现 简介 下图是论文中 Transformer 的内部结构图&#xff0c;左侧为 Enco…