您的位置:首页 > 其它

2017NOIp 普及组第二题 图书管理员

2017-11-22 16:53 302 查看
题目描述

图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数。 每位借书的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图 书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。 小 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.

输入输出样例

输入样例#1:
5 5
2123
1123
23
24
24
2 23
3 123
3 124
2 12
2 12
输出样例#1:
23
1123
-1
-1
-1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: