圖書管理員

【問題描述】

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

【輸入格式】

輸入文件名爲librarian.in。
輸入文件的第一行,包含兩個正整數n 和q,以一個空格分開,分別代表圖書館裏
書的數量和讀者的數量。
接下來的 n 行,每行包含一個正整數,代表圖書館裏某本書的圖書編碼。
接下來的 q 行,每行包含兩個正整數,以一個空格分開,第一個正整數代表圖書館
裏讀者的需求碼的長度,第二個正整數代表讀者的需求碼。

【輸出格式】

輸出文件名爲librarian.out。 
輸出文件有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

【輸入樣例說明】

第一位讀者需要的書有2123、1123、23,其中23 是最小的圖書編碼。第二位讀者需要
的書有2123、1123,其中1123 是最小的圖書編碼。對於第三位,第四位和第五位讀沒有書的圖書編碼以他們的需求碼結尾,即沒有他們需要的書,輸出-1。

【數據規模與約定】

對於 20%的數據,1 ≤ n ≤ 2。
另有 20%的數據,q = 1。
另有 20%的數據,所有讀者的需求碼的長度均爲1。
另有 20%的數據,所有的圖書編碼按從小到大的順序給出。
對於 100%的數據,1 ≤ n ≤ 1,000,1 ≤ q ≤ 1,000,所有的圖書編碼和需求碼均
不超過10,000,000。

【分析與代碼】

這一題也比較簡單,只要模擬一下就可以了。但直接用兩重循環模擬有可能超時。所以先從小到大排序(在【數據規模與約定】中已經有提示了)。

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define M 1000
int n,q;
int a[M+5],ans;
int main()
{
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    sort(a+1,a+n+1);//從小到大排序
    for(int i=1;i<=q;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        int f=0;
        for(int j=1;j<=n;j++)
        {
            if(a[j]%int(pow(10,x))==y)//取末尾編碼
            {
                f=1;
                printf("%d\n",a[j]);
                break;
            }
        }
        if(f==0)printf("-1\n");
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章