洛谷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们轻喷
毕竟我还是个蒟蒻
要是有什么优化也请在评论里指出