NOIP 2017 普级组 图书管理员 librarian

NOIP 2017 普级组 图书管理员 librarian_第1张图片
NOIP 2017 普级组 图书管理员 librarian_第2张图片
NOIP 2017 普级组 图书管理员 librarian_第3张图片

题解:

为啥要用字符串,啥,字符树?不存在的。
你看看数据,不超过10^7,果断暴力
预处理出10^1,10^2,10^3……10^8
给出需求码长度x,跟需求码y
你就把所有的编码mod 10^x 的值看是否等于y
在满足的数中找最小值即可。

时间复杂度:O(NQ)

var
    a:array [0..1001] of longint;
    num:array [1..8] of longint;
    n,q:longint;

function min(aa,bb:longint):longint;
begin
    if aathen exit(aa);
    exit(bb);
end;

procedure init;
var
    i:longint;
begin
    readln(n,q);
    for i:=1 to n do
      readln(a[i]);
    num[1]:=10;
    for i:=2 to 8 do
      num[i]:=num[i-1]*10;
end;

procedure main;
var
    cmin,i,j,x,y:longint;
begin
    for i:=1 to q do
      begin
          readln(x,y);
          cmin:=maxlongint;
          for j:=1 to n do
            if a[j] mod num[x]=y
               then cmin:=min(cmin,a[j]);
          if cmin=maxlongint
             then writeln('-1')
             else writeln(cmin);
      end;
end;

begin
      init;
      main;
end.

你可能感兴趣的:(暴力/枚举/模拟,pascal)