洛谷题解 P3955 【图书管理员】


本题很水,不知我17年是怎么想的,没做出来,结果这次不到10min一遍AC。

其实这道题无需排序直接对每一次询问进行比较就好了(反正数据不大,用不上字符串),具体解析看代码吧。

附代码:

#include<iostream>
using namespace std;
int n,q,nl[1001],ql[1001],qsl[1001];/*n为图书馆里书的数量,q为读者的数量,nl是书的编码,ql是询问的编码,qsl是询问的编码的长度*/
int main()
{
    cin>>n>>q;/*输入*/
    for(int a=1;a<=n;a++)
    {
        cin>>nl[a];/*读入书的编码*/
    }
    for(int a=1;a<=q;a++)
    {
        int ans=-1,k=1;
        cin>>qsl[a];/*读入询问编码的长度*/
        cin>>ql[a];/*读入询问的编码*/
        for(int c=1;c<=qsl[a];c++)/*处理比较的数位*/
        {
            k=k*10;
        }
        for(int b=1;b<=n;b++)/*逐书比较*/
        {
            if(nl[b]%k==ql[a])/*取书的编码的末qsl[a]位与询问编码比较*/
            {
                if(ans==-1||(ans>nl[b]))/*判断是否未找到或是否比已找到的小*/
                {
                    ans=nl[b];/*读入已知书编码最小值*/
                }
            }
        }
        cout<<ans<<endl;/*输出*/
    }
}

题目详见:https://www.luogu.org/problemnew/show/P3955