题解 P3955 【图书管理员】

Nightriver

2017-11-24 20:34:33

Solution

emmm 至于这道题,很多人做过 因此身为蒟蒻的我也试了试 结果是Pascal AC C++ RE 当然最后还是过了- \_-lll 呐,Pascal代码献上 ```cpp 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改编的,但是作者累了,就不解释了:) 】 ```cpp #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:如有雷同,纯属巧合:) 】