图书管理员【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}10x求余(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^xfor (int j=1;j<=n;j++)if (k==a[j]%z) {st=a[j];//找到結果,儲存break;//因為前面排過序了,所以當前的是最優的,找到后就退出}printf("%d\n",st);} }總結
以上是生活随笔為你收集整理的图书管理员【2017年普及组第二题】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【动态规划】打砖块
- 下一篇: 不通过路由器怎么样设置上网路由器不能连接