洛谷p3955 图书管理员(NOIP2017 t2)

蒟蒻的最后一篇pas题解。。。目前转c++ ing

回顾了一下,发现c++的string真的好繁啊(主要我这个蒟蒻太菜不会用)

还是pas的string操作简洁

做法

我这种蒟蒻不像别的dalao,懒得搞长度就直接扔了。。

先把图书编码排个序,数据范围小就直接暴力选排

接着判读书编码的后length(读者编码)长度的字符串是否与读者编码相等

如果相等就输出,并且把k赋值为1,不相等继续搞

最后判一下如果k=0就输出-1

注意:

1.每次做完k变成0;

2.copy(s,x,y)是指在s中从x位开始截取y位,不是从x截到y;

 1 var n,m,i,j,k,l:longint;
 2     a:array[1..1000] of string;
 3     b:array[1..1000] of string;
 4     c,d:char;
 5     s:string;
 6 begin
 7   readln(n,m);
 8   for i:=1 to n do readln(a[i]);
 9   for i:=1 to m do
10   begin
11     readln(s);
12     b[i]:=copy(s,3,length(s));
13   end;
14   for i:=1 to n-1 do
15     for j:=i+1 to n do
16   if (length(a[i])>length(a[j]))or((a[i]>a[j])and(length(a[i])=length(a[j]))) then
17     begin
18       s:=a[i];
19       a[i]:=a[j];
20       a[j]:=s;
21     end;
22   for i:=1 to m do
23   begin
24     k:=0;
25     for j:=1 to n do
26     if k=0 then
27     begin
28       if length(a[j])>=length(b[i]) then
29       begin
30         if copy(a[j],length(a[j])-length(b[i])+1,length(b[i]))=b[i] then
31         begin
32           writeln(a[j]);
33           k:=1;
34         end;
35       end;
36     end;
37     if k=0 then writeln(-1);
38   end;
39 end.

请dalao们轻喷

毕竟我还是个蒟蒻

要是有什么优化也请在评论里指出

 

posted @ 2018-07-13 13:30  DFSlover  阅读(567)  评论(1编辑  收藏  举报

Contact with me