LUOGU P3955题解(NOIP 2017第二题)

来源:互联网 发布:js文件格式化工具 编辑:程序博客网 时间:2024/06/01 08:31

题目描述:
图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数。 每位借书的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图 书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。 小 D 刚刚当上图书馆的管理员,她知道图书馆里所有书的图书编码,她请你帮她写 一个程序,对于每一位读者,求出他所需要的书中图书编码最小的那本书,如果没有他 需要的书,请输出-1。

这里写图片描述

今年普及组的第二题,较往年来说,难度大为下降。
首先来看一下算法:
这是一道纯模拟,先用一个b数组存放图书馆里面的书,在定义结构体,存放顾客所需码和所需码的位数。因为神奇的CCF为我们提供了所需码的位数,我们可以直接按位相除,求出尾数,再进行判断。
注意:
1.在进行判断最小值的时候,建议定义常量来进行比较(本蒟蒻今年犯这个错丢了80分)。
2.可以选择在读入b数组的时候就排一遍序(可以不排,但是不稳定)
代码如下:

#include<iostream>#include<cstdio>//#include<algorithm>using namespace std;//const int minn=1e+9;  比较最小值//int res;  存放答案int b[10001];  //存放图书馆书目的编码struct cost{  //顾客的所需码和所需码的长度    int s;  //所需码    int num;  //长度}a[101];/*int comp(int a,int b){return a<b;}*/int main(){   int n,q;     scanf("%d %d",&n,&q);  //建议用scanf的时候打空格    for(int i=1;i<=n;i++)        scanf("%d",&b[i]);  //读入//sort(b+1,b+n+1,comp);    for(int i=1;i<=q;i++)        scanf("%d%d",&a[i].s,&a[i].num);    int c,d,e;    int minn=99999999;      bool t=true;  //判断是否有出现    for(int i=1;i<=q;i++)  //q位顾客循环q次    {        for(int j=1;j<=n;j++)  //每一个都试一次        {            c=b[j];            d=a[i].s;            e=a[i].num;  //c,d,e 暂时存放            while(d!=0)            {                if(c%10==e%10)  //如果最后一位都相等                {                    c/=10;  //继续判断                    e/=10;                    d--;                    t=true;  //寻找到答案                }                else                {                    t=false;  //否则的话不是答案                    break;  //跳出                }            }            if(t==true)  //如果有答案            {                if(b[j]<minn)  //并且小于minn值                    minn=b[j];  //更新minn值            }*/            else                continue;  //否则继续查找        }        if(minn!=99999999)  //当全部找完是,如果minn不为原值的话,                                  就说明找到了一个值        {            printf("%d\n",minn);  //输出现在的最小值            t=false;              minn=99999999;  //为下一次查找回复原值        }        else            printf("-1\n");  //否则就是没找到    }    fclose(stdin);    fclose(stdout);    return 0;}
原创粉丝点击