我是靠谱客的博主 落后宝马,最近开发中收集的这篇文章主要介绍2017NOIp 普及组第二题 图书管理员,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述

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

这题个人用的是排序和字符串的做法
先排序
在过程中拉两个数进去比较尾数
若相等就输出然后跳到下一个数
若没有找到别忘了输出-1

var
 n,m,i,j:longint;
 a:array[0..1001] of longint;
 d:array[0..1001,1..2] of longint;

procedure qsort(l,r:longint);
 var
 i,j,key,t:longint;
begin
 i:=l; j:=r; key:=a[(l+r) div 2];
 repeat
  while a[i]<key do inc(i);
  while a[j]>key do dec(j);
  if i<=j then
   begin
    t:=a[i];
    a[i]:=a[j];
    a[j]:=t;
    inc(i);
    dec(j);
   end;
 until i>j;
 if l<j then qsort(l,j);
 if i<r then qsort(i,r);
end;


procedure find(ans,w:longint);
 var
  i,tot,len,j:longint;
  s,s2:string;
begin
 for i:=1 to n do
  begin
   str(a[i],s);
   len:=length(s);
   if len>=w then
    begin
     for j:=1 to len-w do
      delete(s,1,1);
     str(ans,s2);
     if s2=s then begin
                    writeln(a[i]);
                    exit;
                   end;
    end;
  end;
  writeln('-1');
end;

begin
 readln(n,m);
 for i:=1 to n do
  readln(a[i]);
 qsort(1,n);
 for i:=1 to m do
 begin
  readln(d[i,1],d[i,2]);
  find(d[i,2],d[i,1]);
 end;
end.

输入输出样例

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

最后

以上就是落后宝马为你收集整理的2017NOIp 普及组第二题 图书管理员的全部内容,希望文章能够帮你解决2017NOIp 普及组第二题 图书管理员所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部