1. 程式人生 > >圖書管理員【2017年普及組第二題】

圖書管理員【2017年普及組第二題】

圖書管理員

題目描述

圖書館中每本書都有一個圖書編碼,可以用於快速檢索圖書,這個圖書編碼是一個正整數。

每位借書的讀者手中有一個需求碼,這個需求碼也是一個正整數。如果一本書的圖書編碼恰好以讀者的需 求碼結尾,那麼這本書就是這位讀者所需要的。

小 D 剛剛當上圖書館的管理員,她知道圖書館裡所有書的圖書編碼,她請你幫她寫一個程式,對於每一位 讀者,求出他所需要的書中圖書編碼最小的那本書,如果沒有他需要的書,請輸出-1。

輸入

輸入檔案的第一行,包含兩個正整數 n 和 q,以一個空格分開,分別代表圖書館裡書的數量和讀者的數 量。

接下來的n 行,每行包含一個正整數,代表圖書館裡某本書的圖書編碼。

接下來的q 行,每行包含兩個正整數,以一個空格分開,第一個正整數代表圖書館裡讀者的需求碼的長 度,第二個正整數代表讀者的需求碼。

輸出

輸出檔案有 q 行,每行包含一個整數,如果存在第 i 個讀者所需要的書,則在第 i行輸出第i 個讀者所需要的書中圖書編碼最小的那本書的圖書編碼,否則輸出-1。

輸入樣例

5 5

2123

1123

23

24

24

2 23

3 123

3 124

2 12

2 12

輸出樣例

23

1123

-1

-1

-1

說明

對於 20%的資料, 1 ≤ n ≤ 2。

另有 20%的資料, q = 1。

另有 20%的資料,所有讀者需求碼長度均為 1。

另有 20%的資料,所有圖書 編碼 按從小到大 小到大 的順序 給出。

對於 100%的資料, 1 ≤ n ≤ 1,000,1 ≤ q ≤ 1,000,所有的圖書編碼和需求碼均不超過 10,000,000。

解題思路:

這道題可以用一個數組來儲存每一個圖書編碼,然後排序一遍,因為他已經告訴我們第i個讀者需求碼的長度,用圖書編碼對10x10^{x}求餘(x是讀者需求碼的長度)的結果和讀者需求碼比較,如果相同這就是當前的最優。

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std; int n,m,x,z,k,st,a[1005]; int main() { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) scanf("%d",&a[i]);//讀入圖書編碼 sort(a+1,a+1+n);//排序 for (int i=1;i<=m;i++) { scanf("%d%d",&x,&k);//x為讀者需求碼的長度,k為讀者的需求碼 st=-1;z=1;//清零 while(x) x--,z*=10;//求10^x for (int j=1;j<=n;j++) if (k==a[j]%z) { st=a[j];//找到結果,儲存 break;//因為前面排過序了,所以當前的是最優的,找到後就退出 } printf("%d\n",st); } }