1. 程式人生 > >NOIP 2017 圖書管理員

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; }