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