题解 P3955 【图书管理员】
KillerXu
2017-11-12 17:12:06
对于第一次参加NOIp的蒟蒻来说,看到普及组前两题都笑了,看来题目放水了。
但是,在我考完以后,发现很多人被水淹死了,我就准备发一篇题解,告诉大家凡事不要想的太复杂(例如提高组第一题)
首先要分析数据范围,不是特别大,说明是一道模拟题
再看,编号范围不会超过一千万,##所以不用字符串。
接下来,我们要去比较读者的需求码和图书编码的末尾,既然输入了编码长度,那么显然应该用 图书编码 mod 10^编码长度 与需求码比较,我们可以定义变量min来存储最小编码。
最后如果min还是初值,输出-1,否则输出min
愉快的AC了
```cpp
#include<stdio.h>
int num[1001];
int main()
{
int n,q,xq1,xq2,i,m;
scanf("%d%d",&n,&q);
for(i=1;i<=n;i++) scanf("%d",&num[i]);//读入图书编码
int mod,min;//mod用来计算应取余多少
for(m=1;m<=q;m++)
{
mod=1; min=10000000;//赋初值
scanf("%d%d",&xq1,&xq2);//读入需求码长度和需求码
for(i=1;i<=xq1;i++) mod*=10;//计算取余值
for(i=1;i<=n;i++)
{
if(num[i]%mod==xq2&&num[i]<min) min=num[i];//如果图书码末尾和需求码一样,且编码比当前最小的编码小,刷新min
}
if(min==10000000) printf("-1\n"); else printf("%d\n",min);//判断输出
}
return 0;
}//其实就是这么简单,分析好题目就会找到合适的方法
```