2017 NOIp普及グループ第二題図書管理者

4983 ワード

タイトルの説明
図書館には本ごとに図書コードがあり、図書を迅速に検索するために使用することができます.この図書コードは正の整数です.本を借りた読者一人一人の手には需要コードがあり、この需要コードも正の整数です.もし1冊の本の図書コードがちょうど読者の需要コードで終わるならば、この本はこの読者が必要とするものです.Dさんは図書館の管理人になったばかりで、彼女は図書館のすべての本の図書のコードを知っていて、彼女はあなたにプログラムを書いてもらって、すべての読者に対して、彼の必要な本の中で図書のコードが一番小さい本を求めて、もし彼の必要な本がなければ、-1を出力してください.
この問題は個人的にソートと文字列の方法で先にソートして過程の中で2つの数を引き入れて比較の末尾の数が等しいなら出力してそれから次の数にジャンプしてもし見つからないならば出力を忘れないでください-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]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 lthen qsort(l,j);
 if ithen 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