题解 P3955 【图书管理员】

KillerXu

2017-11-12 17:12:06

Solution

对于第一次参加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; }//其实就是这么简单,分析好题目就会找到合适的方法 ```