我是靠谱客的博主 感动冰淇淋,最近开发中收集的这篇文章主要介绍LUOGU P3955题解(NOIP 2017第二题),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述:
图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数。 每位借书的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图 书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。 小 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("%dn",minn);  //输出现在的最小值
            t=false;  
            minn=99999999;  //为下一次查找回复原值
        }
        else
            printf("-1n");  //否则就是没找到
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}

最后

以上就是感动冰淇淋为你收集整理的LUOGU P3955题解(NOIP 2017第二题)的全部内容,希望文章能够帮你解决LUOGU P3955题解(NOIP 2017第二题)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部