题解:P3955 [NOIP2017 普及组] 图书管理员

· · 题解

题解:P3955 [NOIP2017 普及组] 图书管理员

我们要知道 x 的后 y 位等于 x \bmod 10^y,所以我们对于每个需求码,都可以枚举每一个数,找到符合要求的最小值,如果没有,输出 -1

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5,inf=1e9;
int n,q;
int a[N]; 
int qpow(int a,int b){
    int ans=1;
    while(b){
        if(b&1) ans*=a;
        a*=a;
        b>>=1;
    }
    return ans;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    while(q--){
        int len,x;
        cin>>len>>x;
        int ans=inf;
        for(int i=1;i<=n;i++){
            if(a[i]%qpow(10,len)==x) ans=min(ans,a[i]);
        }
        if(ans<inf) cout<<ans<<"\n";
        else cout<<"-1\n";
    }
    return 0;
}