P3955 图书管理员 题解


以下题解仅供学习参考使用。

抄袭、复制题解,以达到刷AC率/AC数量或其他目的的行为,在洛谷是严格禁止的。

洛谷非常重视学术诚信。此类行为将会导致您成为作弊者。具体细则请查看洛谷社区规则

评论

  • 还没有评论
作者: Nightriver 更新时间: 2017-11-24 20:34  在Ta的博客查看 举报    1  

emmm 至于这道题,很多人做过

因此身为蒟蒻的我也试了试

结果是Pascal AC

C++ RE 当然最后还是过了- _-lll

呐,Pascal代码献上

var
  n,i,j,k,t,s,r,q:longint;//多余的大家无视就行,作者习惯
  a,x,y,m:array[1..100051]of longint;//数组多余的无视就行,作者习惯
  b:boolean;//方便啦
function anddd(n,m:longint):longint;//只是作者比较笨,所以就把n^m打成了函数
var i:longint;
begin
  anddd:=1;
  for i:=1 to m do anddd:=anddd*n;
end;
begin//主程序到此
  read(n,q);
  for i:=1 to n do read(a[i]);//不管,先读入
  for i:=1 to q do begin//作者为了少打字,所以就这样了,习惯就好
    read(x[i],y[i]);//读入
    m[i]:=2147483647;//为了方便后面的比大小,就直接取了数据上限
    b:=false;//判断是否可以
    for j:=1 to n do begin//书的代码一个个找
      if a[j] mod anddd(10,x[i])=y[i] then if a[j]<m[i] then begin//判断其末尾是否符合
        m[i]:=a[j];//如果符合就。。。
        b:=true;
      end;
    end;
    if b then writeln(m[i])//如果可以就输出
    else writeln(-1);//如果不行就输出-1
  end;
end.//Pascal代码到此,感谢配合:)

----------------------------------Pascal--------------------------- -----------------------------------分割线-------------------------

-----------------------------------C++----------------------------

好的 接下来是C++代码

【P.S:其实是由Pascal改编的,但是作者累了,就不解释了:) 】

#include<iostream>
using namespace std;
int anddd(int,int);
int a[1001],m[1001],x[1001],y[1001];
int main()
{
    int n,q;
    bool b;
    cin>>n>>q;
    for (int i=1;i<=n;i++) cin>>a[i];
    for (int i=1;i<=q;i++)
    {
        cin>>x[i]>>y[i];
        m[i]=2147483647;
        b=false;
        for (int j=1;j<=n;j++)
        {
            if ((a[j]%(anddd(10,x[i])))==y[i]) if (a[j]<m[i])
            {
                m[i]=a[j];
                b=true;
            }
        }
        if (b) cout<<m[i]<<endl;
        else cout<<-1<<endl;
    }
}
int anddd(int n,int m)
{
    int a=1;
    for (int i=1;i<=m;i++) a*=n;
    return a; 
}

---------------------------------作者歇去了,拜拜------------------ 【P.S:如有雷同,纯属巧合:) 】

 
反馈
如果你认为某个题解有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。