[NOIP2017]图书管理员
思路
先给书本编号从小到大排序
如何判断每本书编号后缀是否有询问的数x?
一个直观且快速的办法:书本编号-x之后,后面几位都会变成0
所以只要判断减去之后的数是否有len个0就好了(取模)
如果用字符串做会很麻烦
复杂度O(nq),数据可过
代码
#include<bits/stdc++.h>
using namespace std;
int n,q,book[1005],len,num;
int main(){
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++){
scanf("%d",&book[i]);
}
sort(book+1,book+1+n);
for(int i=1;i<=q;i++){
scanf("%d%d",&len,&num);
int big_num=1,flag=0;
for(int j=1;j<=len;j++) big_num*=10;
for(int j=1;j<=n;j++){
if((book[j]-num)%big_num==0){
cout<<book[j]<<endl;
flag=1;
break;
}
}
if(!flag) cout<<-1<<endl;
}
return 0;
} 
京公网安备 11010502036488号