题解 P3955 【图书管理员】
LinkyChristian
2018-11-01 17:10:03
将读者的需求码与图书编码配对。
- 把需求码与图书编码配对 = 求图书编码的后 X 位
- 求图书编码的后 X 位 = 把前面的都去掉。
如何把前面的无关数字去掉呢?这时候我们想起了 $\%$ 运算。
对于一个数$a$,很显然它的个位数是:$a \% 10$ 。
但是这是我们人工计算出的结果,而各个需求码的位数不同,这时候就需要找出一个规律。
对此我们发现了规律:对一个数 $a$ 取其后 $n$ 位,就是 $a \% 10^n$ 。
cmath 头文件中带有专门执行幂运算的函数。
其中有一个要注意的点是,pow 函数并不能直接进行 mod 运算,需要将其带入一个变量进行运算。
遍历求最小值即可。
### 最后贴代码
```
#include<iostream>
#include<cmath>
using namespace std;
int n,q,book[6666],len[6666],num[6666];
int main()
{
cin>>n>>q;
for(int i=1; i<=n; i++) cin>>book[i];
for(int i=1; i<=q; i++) {
cin>>len[i]>>num[i];
int tmp = pow(10,len[i]),min = 10000001;
for(int j=1; j<=n; j++) if(book[j] % tmp == num[i] && book[j] < min) min = book[j];
if(min != 10000001) cout<<min<<endl;
else cout<<-1<<endl;
}
return 0;
}
```