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

· · 题解

题目题意较简单,就先不讲了。

本题解就主要讲一下思路

解题思路

可以先把每一本书的编码用 sort进行升序排序,因为这样就可以在运行查找的时候使得这个满足条件的编码是最小的。

接下来是判断一个 x 位数是否是另一个数的后缀,我第一眼看到是直接比较,实现了一下发现不行,就想到了可以对这个数取余 10^x,然后再比较,真不知道我之前咋想的。

还有不符合要求的数的话,直接输出 -1

CODE

#include<bits/stdc++.h>
using namespace std;
int a[1005]={},x,y;
bool cmp(int x,int y){//虽然没啥用,但是养成习惯了,不用管 
    return x<y; 
}
int pow1(int x){
    int ans=1;
    for(int i=1;i<=x;i++){
        ans*=10;
    }
    return ans;
}
int main(){
    int n,q;
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1,cmp);
    bool mark;
    while(q--){
        cin>>x>>y;
        mark=1;
        for(int i=1;i<=n;i++){
            if(a[i]%pow1(x)==y){
                cout<<a[i]<<endl;
                mark=0;
                break;
            }
        }
        if(mark!=0){
            cout<<-1<<endl;
        }
    }
    return 0;
}

求管理过,Thanks♪(・ω・)ノ