NOIP 2017 圖書管理員
阿新 • • 發佈:2018-12-08
題目描述
圖書館中每本書都有一個圖書編碼,可以用於快速檢索圖書,這個圖書編碼是一個 正整數。 每位借書的讀者手中有一個需求碼,這個需求碼也是一個正整數。如果一本書的圖 書編碼恰好以讀者的需求碼結尾,那麼這本書就是這位讀者所需要的。 小 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> usingnamespace 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; }