洛谷 P3955 [NOIP2017 普及组] 图书管理员

本文由Jzwalliser原创,发布在CSDN平台上,遵循CC 4.0 BY-SA协议。
因此,若需转载/引用本文,请注明作者并附原文链接,且禁止删除/修改本段文字。
违者必究,谢谢配合。
个人主页:blog.csdn.net/jzwalliser

题目

洛谷 P3955 [NOIP2017 普及组] 图书管理员

[NOIP2017 普及组] 图书管理员

题目背景

NOIP2017 普及组 T2

题目描述

图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数。 每位借书 的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。 小 D 刚刚当上图书馆的管理员,她知道图书馆里所有书的图书编码,她请你帮她写一个程序,对于每一位读者,求出他所需要的书中图书编码最小的那本书,如果没有他需要的书,请输出 -1

输入格式

第一行,包含两个正整数 n , q n , q n,q,以一个空格分开,分别代表图书馆里 书的数量和读者的数量。
接下来的 n n n 行,每行包含一个正整数,代表图 书馆里某本书的图书编码。

接下来的 q q q 行,每行包含两个正整数,以一个 空格分开,第一个正整数代表图书馆 里读者的需求 码的长度,第二个正整数代表读者的需求码。

输出格式

q q q 行,每行包含一个整数,如果存在第 i i i 个读者所需要的书,则在第 i i i 行输出第 i i i 个读者所需要的书中图书编码最小的那本书的图书编码,否则输出 − 1 -1 1

样例 #1

样例输入 #1
5 5
2123
1123
23
24
24
2 23
3 123
3 124
2 12
2 12
样例输出 #1
23
1123
-1
-1
-1

提示

数据规模与约定

对于 20 % 20\% 20% 的数据, 1 ≤ n ≤ 2 1 ≤ n ≤ 2 1n2

另有 20 % 20\% 20% 的数据, q = 1 q = 1 q=1

另有 20 % 20\% 20% 的数据,所有读者的需求码的长度均为 1 1 1

另有 20 % 20\% 20% 的数据,所有的图书编码按从小到大的顺序给出。

对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 1000 , 1 ≤ q ≤ 1000 1 ≤ n ≤ 1000,1 ≤ q ≤ 1000 1n1000,1q1000,所有的图书编码和需求码均不超过 1 0 7 10^7 107

想法

很明显读者的“需求码”比图书编码要短,且需求码是图书码的后缀。这样,可以想到一种思路:映射。
首先,开一个数组table,初始化为 − 1 -1 1。假设输入的图书编码为1234,那么我们就令 t a b l e [ 1234 ] = t a b l e [ 234 ] = t a b l e [ 34 ] = t a b l e [ 4 ] = 1234 table[1234]=table[234]=table[34]=table[4]=1234 table[1234]=table[234]=table[34]=table[4]=1234,这样查询“需求码”时会很方便。比如这时有需求码 34 34 34,那么我们直接查询 t a b l e [ 34 ] table[34] table[34],就可以得到图书编码1234。不过我们后面实现会有所优化,将一个指针保存到对应位置,而不是实际数据。
当然,图书编码有许多,如何才能保证读者获取的图书的编码是最小的呢?这就需要将图书编码排序,然后从大到小按照刚才的方式处理,这样较小的编码会覆盖掉较大的编码。

实现

  1. 输入图书编码。
  2. 将图书编码排序。
  3. 从大到小依次处理图书编码。
  4. 输入查询。
  5. 在表中查询映射关系,输出。

题解

C++

#include<bits/stdc++.h>
using namespace std;
int books[1005];
int request;
short table[10000005];
int main(){int n,q,devnull; //devnull用作垃圾桶cin >> n >> q; //输入图书和查询数量for(int i = 1;i <= n;i++){cin >> books[i]; //输入图书编码}sort(books + 1,books + n); //排序for(int i = n;i >= 1;i--){ //从大到小处理图书编码int copy = books[i]; //复制编码,然后再修改while(copy){ //重复一下操作直到编码被“削”完table[copy] = i; //建立映射关系copy = copy % int(pow(10,int(log10(copy)))); //每次削掉编码的最高位}}books[0] = -1; //table表中初始值都是0,指向books[0],所以需要把books[0]设置为-1,这样没查询到的就会输出-1for(int i = 0;i < q;i++){ //处理查询cin >> devnull >> request;cout << books[table[request]] << "\n";}return 0;
}

Python

import math
books = [-1] #table表中初始值都是0,指向books[0],所以需要把books[0]设置为-1,这样没查询到的就会输出-1
table = [0] * 10000000n,q = input().split() #输入图书和查询数量
n = int(n)
q = int(q)for i in range(n):books.append(int(input())) #输入图书编码
books.sort() #排序for i in reversed(range(1,n + 1)): #从大到小处理图书编码copy = books[i] #复制编码,然后再修改while copy: #重复一下操作直到编码被“削”完table[copy] = i #建立映射关系copy = copy % int(10 ** int(math.log10(copy))) #每次削掉编码的最高位for i in range(q): #处理查询request = int(input().split()[1])print(books[table[request]])

难度

难度:★★☆☆☆
这道题稍有些难度,要想到这个算法也需要些经验。

结尾

这道题你是怎么AC的?欢迎讨论!希望各位多多指教,我们下期再见!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity编辑器工具---版本控制与自动化打包工具

Unity - 特殊文件夹【作用与是否会被打包到build中】 Unity编辑器工具—版本控制与自动化打包工具&#xff1a; 面板显示&#xff1a;工具包含一个面板&#xff0c;用于展示软件的不同版本信息。版本信息&#xff1a;面板上显示主版本号、当前版本号和子版本号。版本控制功能…

单目行车测距摄像系统(单目测距-行车)

单目行车测距摄像系统是一种利用单个摄像头实现车辆行驶中前方障碍物距离测量的技术。该系统通过计算机视觉算法&#xff0c;能够实时分析摄像头捕捉的图像&#xff0c;精确计算出车辆与前方物体之间的距离&#xff0c;对于自动驾驶、高级驾驶辅助系统&#xff08;ADAS&#xf…

【探索Linux】P.36(传输层 —— TCP协议段格式)

阅读导航 引言一、TCP段的基本格式二、控制位详细介绍三、16位接收窗口大小⭕窗口大小的作用⭕窗口大小的限制⭕窗口缩放选项⭕窗口大小的更新⭕窗口大小与拥塞控制 四、紧急指针温馨提示 引言 在上一篇文章中&#xff0c;我们深入探讨了一种无连接的UDP协议&#xff0c;它以其…

《新华日报》理论版报刊简介及投稿邮箱

《新华日报》理论版报刊简介及投稿邮箱 《新华日报》是中国共产党在抗日战争时期和解放战争初期创办的大型机关报&#xff0c;1949 年 4 月在南京复刊&#xff0c;1952 年成为中国共产党江苏省委机关报&#xff0c;现为中共江苏省委直属事业单位。 该报纸的理论版&#xff08;…

记录前端发现问题之 mock接口无返回数据导致所有后续接口调用报错:网络异常

1. 背景 就更新了代码&#xff0c;发现新涉及的页面&#xff0c;切换tab 之后会报错网络异常&#xff0c;再次切换其他没涉及的功能页面&#xff0c;继续报错网络异常 测试环境&#xff1a;纯前端代码&#xff0c;后端是前端mock的数据&#xff0c;仅供demo 2. 问题报错 手动…

开箱机视觉系统大揭秘:如何轻松辨别千差万别的包装?

在现代物流仓储领域&#xff0c;开箱机作为提升作业效率的关键设备&#xff0c;正日益受到行业的重视。而开箱机的视觉系统更是其十分强大&#xff0c;能够准确辨认不同包装&#xff0c;确保物流作业的高效与准确。与星派深入探究一下开箱机视觉系统是如何工作的&#xff0c;以…

女生读中职,选择什么专业最吃香!

自《国家职业教育改革实施方案》颁布实施以来,中国职业教育的改革和发展已取得显著进展。目前,我国已建立起世界上规模最大的职业教育体系,中高职学校每年培养约1000万高素质技术技能人才,职业教育实现了历史性的跨越。对于那些不愿加入“千军万马过独木桥”的高考竞争大军,初中…

Firewalld防火墙基础

Firewalld 支持网络区域所定义的网络连接以及接口安全等级的动态防火墙管理工具 支持IPv4、IPv6防火墙设置以及以太网桥 支持服务或应用程序直接添加防火墙规则接口 拥有两种配置模式 运行时配置&#xff1a;临时生效&#xff0c;一旦重启或者重载即不生效 永久配置&#xff1a…

华三多台交换机堆叠配置(环形组网)

组网架构 配置步骤 SW1的配置&#xff1a; irf member 1 priority 32 设置master的优先级为32 interfacec range Ten-GigabitEthernet1/0/49 to Ten-GigabitEthernet1/0/50 shutdown 关闭上述接口&#xff08;将其加入到堆叠口之前需要关闭&#xff0c;否则无法加入&a…

机器学习 - 实现KNN对图像有监督学习的 分类算法 (一)【原理】

一、KNN算法介绍&#xff1a; KNN 算法&#xff0c;或者称 k最邻近算法&#xff0c;是 有监督学习 中的 分类算法 。它可以用于分类或回归问题&#xff0c;但它通常用作分类算法。 KNN &#xff08;K-Nearest Neighbor&#xff09;算法是机器学习算法中最基础、最简单的算法之一…

“不喝鸡汤 不诉离殇”华火电燃灶用实力引领烹饪灶具发展

在这个快节奏的时代&#xff0c;我们常常被各种厨房电器的鸡汤所包围&#xff0c;并悄悄的告诉我们厨房生活是美好与温暖的&#xff0c;但面对现实中的挑战与困难时&#xff0c;常常表现出选择性失明&#xff1b;那些隐藏在传统厨房烹饪环境下的危机&#xff0c;就像是慢性的毒…

[Python学习篇] Python函数

定义函数 语法&#xff1a;使用关键字 def def 函数名(参数): 代码1 代码2 ...... 调用函数 语法&#xff1a; 函数名(参数) 注意&#xff1a;不同的需求&#xff0c;参数可有可无。在Python中&#xff0c;函数必须先定义后使用 示例&#xff1a; # 定义函数 d…

华为仓颉编程语言

目录 一、引言 二、仓颉编程语言概述 三、技术特征 四、应用场景 五、社区支持 六、结论与展望 一、引言 随着信息技术的快速发展&#xff0c;编程语言作为软件开发的核心工具&#xff0c;其重要性日益凸显。近年来&#xff0c;华为公司投入大量研发资源&#xff0c;成功…

小白学python(第三天)

小伙伴&#xff0c;大家好呀&#xff0c;昨天的内容吸收的好&#xff1f;昨天有小伙伴私信我&#xff0c;建议我在博文中加点练习题&#xff0c;可以看出这位童鞋很想学好这门语言哈&#xff0c;那我也尽量满足大家的要求。 从控制台输入 语法格式&#xff1a; 变量名 input…

C++基础(三):C++入门(二)

上一篇博客我们正式进入C的学习&#xff0c;这一篇博客我们继续学习C入门的基础内容&#xff0c;一定要学好入门阶段的内容&#xff0c;这是后续学习C的基础&#xff0c;方便我们后续更加容易的理解C。 目录 一、内联函数 1.0 产生的原因 1.1 概念 1.2 特性 1.3 面试题 …

深入了解Qt 控件:Display Widgets部件(1) 以及 QT自定义控件(电池)

QT自定义控件(电池&#xff09; 在线调色板Qt之CSS专栏Chapter1 QT自定义控件(电池&#xff09;Chapter2 Qt教程 — 3.5 深入了解Qt 控件&#xff1a;Display Widgets部件(1)1 Display Widgets简介2 如何使用Display Widgets部件 Chapter3 Qt自定义控件电池组件使用前言一、最基…

告别熬夜改稿:AI降重工具让论文降重变得轻松又有趣

已经天临五年了&#xff0c;大学生们还在为论文降重烦恼……手动降重确实是个难题&#xff0c;必须要先付点小经费去靠谱的网站查重&#xff0c;再对着红字标注去改&#xff0c;后面每一次的论文呢查重结果都像赌//博&#xff0c;谁也不知道明明是同一篇文章&#xff0c;第二次…

Linux:系统引导过程与服务控制

目录 一、linux 系统引导过程 1.1、引导过程总览 1.2、系统初始化进程 &#xff08;centos 6和7 的区别&#xff09; 1.2.1、centos 6 的引导过程 init 进程 1.2.2、centos 7(systemd进程) 二、MBR、GRUB菜单、忘记密码故障修复 2.1、修复MBR扇区故障 模拟故障 重启…

IT行业入门,如何假期逆袭,实现抢跑

目录 前言 1.IT行业领域分类 2.基础课程预习指南 3.技术学习路线 4.学习资源推荐 结束语 前言 IT&#xff08;信息技术&#xff09;行业是一个非常广泛和多样化的领域&#xff0c;它包括了许多不同的专业领域和职业路径。如果要进军IT行业&#xff0c;我们应该要明确自己…