[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;
}