NOIP 2017 圖書管理員

題目描述

圖書館中每本書都有一個圖書編碼,能夠用於快速檢索圖書,這個圖書編碼是一個 正整數。 每位借書的讀者手中有一個需求碼,這個需求碼也是一個正整數。若是一本書的圖 書編碼剛好以讀者的需求碼結尾,那麼這本書就是這位讀者所須要的。 小 D 剛剛當上圖書館的管理員,她知道圖書館裏全部書的圖書編碼,她請你幫她寫 一個程序,對於每一位讀者,求出他所須要的書中圖書編碼最小的那本書,若是沒有他 須要的書,請輸出-1。c++

輸入輸出格式

輸入格式:編碼

 

第一行,包含兩個正整數n 和q,以一個空格分開,分別表明圖書館裏 書的數量和讀者的數量。 接下來的 n 行,每行包含一個正整數,表明圖書館裏某本書的圖書編碼。 接下來的 q 行,每行包含兩個正整數,以一個空格分開,第一個正整數表明圖書館 裏讀者的需求碼的長度,第二個正整數表明讀者的需求碼。spa

 

輸出格式:code

 

有q 行,每行包含一個整數,若是存在第i 個讀者所須要的書,則在第i 行輸出第i 個讀者所須要的書中圖書編碼最小的那本書的圖書編碼,不然輸出-1。blog

 

輸入輸出樣例

輸入樣例#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;
  }
相關文章
相關標籤/搜索