[NOIP2017]图书管理员

  • 1.题目
  • 2.分析
  • 3.代码
    • ✔第一次:每个读者依次寻找,开多个数组存储,会造成空间的极大浪费
    • ✔第二次:使用qsort函数
  • 4.总结
  • 5.更新日志

1.题目

题目链接

题号:NC16422
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述
图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数。

每位借书的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。

小 D 刚刚当上图书馆的管理员,她知道图书馆里所有书的图书编码,她请你帮她写一个程序,对于每一位读者,求出他所需要的书中图书编码最小的那本书,如果没有他需要的书,请输出-1。

输入描述:

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

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

示例1

输入
5 5
2123
1123
23
24
24
2 23
3 123
3 124
2 12
2 12

输出
23
1123
-1
-1
-1

说明

第一位读者需要的书有 2123、1123、23,其中 23 是最小的图书编码。 第二位读者需要的书有 2123、1123,其中 1123
是最小的图书编码。 对于第三位,第四位和第五位读者,没有书的图书编码以他们的需求码结尾,即没有他们需要的书,输出-1。

备注:
对于 20%的数据,1 ≤ n ≤ 2。 另有 20%的数据,q= 1。
另有 20%的数据,所有读者的需求码的长度均为1。
另有 20%的数据,所有的图书编码按从小到大的顺序给出。
对于 100%的数据,1≤n ≤1,000,1 ≤ q ≤ 1,000,所有的图书编码和需求码均不超过 10,000,000。

2.分析

暴力遍历
难点在于如何判断成功与否找到书籍

3.代码

✔第一次:每个读者依次寻找,开多个数组存储,会造成空间的极大浪费

#include <stdio.h>
#include <math.h>int SearchMin(int a[1000],int len)
{int i,j,MIN=a[0];for(i=0;i<len;i++){if(a[i]<MIN)MIN=a[i];   //记录最小值}return MIN;
}int SearchBook(int book[1000],int signal,int sz,int length)    //传入书籍 书籍数量 码 码长
{int i,k=0,count=0,FindSignal[1000];for(i=0;i<sz;i++)   //依次遍历n本书{if(signal>book[i])continue;else if(signal==book[i])    //记录找到的书,便于输出最小的值{FindSignal[k++]=book[i];count++;}else{int temp=pow(10,length);int TEMP=(book[i]-signal)%temp;if(TEMP==0){FindSignal[k++]=book[i];count++;}}}if(count==0)   //未找到return -1;else{return SearchMin(FindSignal,count);}
}int main()
{int n,q; int i,j,k,Book[1000],Length[1000],Signal[1000];scanf("%d %d",&n,&q);   //输入书的数量 和 读者数量for(i=0;i<n;i++)scanf("%d",&Book[i]);   //记录书籍for(j=0;j<q;j++)scanf("%d %d",&Length[j],&Signal[j]); //记录长度 和 码for(k=0;k<q;k++)    //每个读者依次查找printf("%d\n",SearchBook(Book,Signal[k],n,Length[k]));return 0;
}

✔第二次:使用qsort函数

qsort函数

#include <stdio.h>          //注意i,j的顺序别写错了
#include <math.h>
#include <stdlib.h>
int cmp(const void *x,const void *y)    //从小到大排序
{return *(int *)x-*(int *)y;
}
int main()
{int n,q;int i,j;int flag=0;int Books[1000],Length[1000],Numbers[1000];scanf("%d %d",&n,&q);    //输入书籍数量和读者数量for(i=0;i<n;i++)scanf("%d",&Books[i]);   //输入书籍号码for(j=0;j<q;j++)scanf("%d %d",&Length[j],&Numbers[j]);  //输入长度,索书号qsort(Books,n,sizeof(int),cmp);  //将Books数组排序for(i=0;i<q;i++)        //一共q个读者{flag=0;int temp= pow(10,Length[i]);for(j=0;j<n;j++){if(Books[j]%temp==Numbers[i])    //余数字的最后几位检验是否相同{printf("%d\n",Books[j]);flag=1;break;}}if(!flag)printf("%d\n",-1);}return 0;
}

4.总结

数组的灵活运用
库函数的使用

5.更新日志

2022.3.21 整理

[NOIP2017]图书管理员相关推荐

  1. 牛客题库 题解 | #[NOIP2017]图书管理员#

    链接:#[NOIP2017]图书管理员# 题目牛客网是互联网求职神器,C++.Java.前端.产品.运营技能学习/备考/求职题库,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨 ...

  2. NOIP 2017 图书管理员

    洛谷 P3955 图书管理员 https://www.luogu.org/problemnew/show/P3955 JDOJ 3161: [NOIP2017]图书管理员 T2 https://neo ...

  3. P3955 [NOIP2017 普及组] 图书管理员C++题解

    洛谷来源:P3955 [NOIP2017 普及组] 图书管理员 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/sol ...

  4. 信息学奥赛一本通 1415:【17NOIP普及组】图书管理员 | 洛谷 P3955 [NOIP2017 普及组] 图书管理员

    [题目链接] ybt 1415:[17NOIP普及组]图书管理员 洛谷 P3955 [NOIP2017 普及组] 图书管理员 [题目考点] 1. 枚举 2. 二分 [解题思路] 解法1:枚举 对于每个 ...

  5. luogu3955 图书管理员(NOIP2017普及组第2题)

    luogu3955 图书管理员(NOIP2017普及组第2题) 时空限制    1000ms/128MB 题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. ...

  6. springboot图书管理怎么实现借书时间到期提醒_智能机器人充当图书管理员,看看它能干嘛...

    想必大家都去过图书馆吧,每当出现一些问题时,大家都会询问图书管理员.说起图书管理员的工作,大多数人的印象是强度大.单调且单一.重复性强.效率低.如果智能机器人走进图书馆,当起了图书管理员了,现状将完全 ...

  7. 周末狂欢赛2(冒泡排序,概率充电器,不勤劳的图书管理员)

    狂欢2 T1:冒泡排序 题目 题解 CODE T2:概率充电器 题目 题解 CODE T3:不勤劳的图书管理员 题目 题解 CODE 我不这么认为.... T1:冒泡排序 题目 下面是一段实现冒泡排序 ...

  8. 图书管理员【2017年普及组第二题】

    图书管理员图书管理员图书管理员 题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一本书的图书编 ...

  9. my-medium.cnf_您的手机如何打开medium.com-我将让门卫和图书管理员解释。

    my-medium.cnf by Andrea Zanin 由Andrea Zanin 您的手机如何打开medium.com-我将让门卫和图书管理员解释. (How your phone opens ...

  10. 【loj2639】[Tjoi2017]不勤劳的图书管理员

    #2639. 「TJOI2017」不勤劳的图书管理员 题目描述 加里敦大学有个帝国图书馆,小豆是图书馆阅览室的一个书籍管理员. 他的任务是把书排成有序的,所以无序的书让他产生厌烦,两本乱序的书会让小豆 ...

最新文章

  1. python中约瑟夫环程序_Python实现约瑟夫环问题的方法
  2. 避坑指南:如何选择适当的预测评价指标?| 程序员评测
  3. parted命令分区
  4. python中函数可以赋值给一个变量_python中函数赋值给变量时的问题注意详解
  5. 6升小米6——算法解题
  6. 数据分析如何从1进阶到10?
  7. Linux Kickstart无人值守安装(上)
  8. 7-1 叶节点求和 (30 分)
  9. word刷子刷格式_Excel技巧—开始菜单之格式刷六大功能
  10. 深度学习入门|第5章 误差反向传播法(二)
  11. python字符串的删除操作_Python字符串操作
  12. Ubuntu下LDAP 部署文档
  13. 市场监管总局通报部分转供电主体不执行国家电价政策案例
  14. 根据价格变化自动识别极值点策略
  15. C#实现将文件、文件夹压缩为压缩包
  16. 十五、移动端vw+rem等比缩放布局开发的详细步骤:包含px与rem的单位换算、二倍图以及如何使用UI给的设计稿等(开发工具HBuilder)
  17. 【第一组】第七次冲刺例会纪要
  18. Ubuntu系统下载网易云音乐
  19. 解析解【闭式解(closed-form solution)】和数值解
  20. 亚特兰提斯之人鱼宝宝

热门文章

  1. flash player 离线版下载地址
  2. KiCad: 一个电子原理图设计和布局创建套件
  3. 重启windows资源管理器命令
  4. 网页版微博HTML解析和提取,爬虫聚焦——以新浪微博为例
  5. bilibili视频解析php源码,Bilibili视频直链信息解析工具源码
  6. VHDL 四选一数据选择器
  7. c++程序员面试宝典
  8. 晶振 Crystal
  9. 第十讲 线性反馈移位寄存器
  10. 病毒分析之伪装360主动防御病毒分析_XiaoBa-20