• NOIP 2017 图书管理员


    题目描述

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

    输入输出格式

    输入格式:

    第一行,包含两个正整数n 和q,以一个空格分开,分别代表图书馆里 书的数量和读者的数量。 接下来的 n 行,每行包含一个正整数,代表图书馆里某本书的图书编码。 接下来的 q 行,每行包含两个正整数,以一个空格分开,第一个正整数代表图书馆 里读者的需求码的长度,第二个正整数代表读者的需求码。

    输出格式:

    有q 行,每行包含一个整数,如果存在第i 个读者所需要的书,则在第i 行输出第i 个读者所需要的书中图书编码最小的那本书的图书编码,否则输出-1。

    输入输出样例

    输入样例#1:
    5 5 
    2123 
    1123 
    23 
    24 
    24 
    2 23 
    3 123 
    3 124 
    2 12 
    2 12
    输出样例#1:
    23 
    1123 
    -1 
    -1 
    -1 



    这道题我个人觉得不难!!!只是字符串而已,对初学者只要认真思考就对了!!!

    code:
    #include<bits/stdc++.h>
      using namespace std;
      struct book{
          int w;
          int num;
      }a[1005];
      int i,j,k,l,n,m;
      int b[1005];
      int ll(int x,int a,int y){
          int len=a;
          int w=1;
          do{
              w*=10;
              len--;
          }while(len!=0);
          if((x%=w)==y)return 1;
          return 0;
      }
      int main(){
          scanf("%d%d",&n,&m);
          for(i=1;i<=n;i++){
              scanf("%d",&b[i]); 
          }
          sort(b+1,b+n+1);
          for(i=1;i<=m;i++){
              scanf("%d%d",&a[i].w,&a[i].num);
          }
          for(i=1;i<=m;i++){
              for(j=1;j<=n;j++){
                  k+=ll(b[j],a[i].w,a[i].num);
                  if(ll(b[j],a[i].w,a[i].num)==1)break;
              }
              if(k==0)cout<<"-1"<<endl;
              else cout<<b[j]<<endl;
              k=0;
          }
          return 0;
      }
    如果大家满意就关注我吧!
  • 相关阅读:
    vue简单分屏(1,4,9,16),全屏,还需要调整
    vue 中的Vuex实践
    常用工具类
    java Log日志规范
    spring中对象的注入方式
    不恰当的update语句使用主键和索引导致mysql死锁
    JPA规范及其它持久层框架
    webservice基本功能介绍
    Activiti工作流(二)之常用操作
    Activiti工作流(一)之基本操作介绍
  • 原文地址:https://www.cnblogs.com/yihengblog/p/10088430.html
Copyright © 2020-2023  润新知