【NOIP 2017】図書管理者

3923 ワード

テーマ説明図書館には、各本に図書コードがあり、図書を迅速に検索するために使用することができます.この図書コードは正の整数です.本を借りた読者一人一人の手には需要コードがあり、この需要コードも正の整数です.もし1冊の本の図書コードがちょうど読者の需要コードで終わるならば、この本はこの読者が必要とするものです.Dさんは図書館の管理人になったばかりで、彼女は図書館のすべての本の図書のコードを知っていて、彼女はあなたにプログラムを書いてもらって、すべての読者に対して、彼の必要な本の中で図書のコードが一番小さい本を求めて、もし彼の必要な本がなければ、-1を出力してください.2つの正の整数nとqを含む最初の行を入力し、図書館の本の数と読者の数を表す1つのスペースで分けます.次のn行は、各行に正の整数が含まれており、図書館のある本の図書コードを表しています.次のq行は、各行に2つの正の整数を含み、1つのスペースで分けられ、1つ目の正の整数は図書館の読者の需要コードの長さを表し、2つ目の正の整数は読者の需要コードを表す.出力にはq行があり、各行には整数が含まれており、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

ちょうど問題を読み終わって、まだとても構想がなくて、どのように書くことを知らないで、考えてみて、文字のタイプを使うのは面倒で、文字列を使うのは、また時間がかかりすぎて、私は考え込んでいます......
ついに、5分後、私は突然、入力データの中の:次のq行、各行は2つの正の整数を含んで、1つのスペースで分けて、1つの正の整数は図書館の中の読者の需要コードの長さを代表して、2つの正の整数は読者の需要コードを代表します.
この长さは何しに来ますか???自分で計算しないの?私は考えてみると、需要コードが末尾を求めている以上、もう一つの長さが来ている以上、型を取りたいと思っています.
送信コード:
#include
#include
#include
const int N=1000;
int n,m,a[N+5];
int mod,reader;
bool f;
int readint()
{
    int x=0;char c=getchar();
    while(c<'0'||c>'9') c=getchar();
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x;
}
int main()
{
    //freopen("librarian.in","r",stdin);
    //freopen("librarian.out","w",stdout);
    n=readint();m=readint();
    for(int i=1;i<=n;i++)
        a[i]=readint();
    std::sort(a+1,a+n+1);
    for(int i=1;i<=m;i++)
    {
        mod=(int)pow(10,readint());
        reader=readint();
        f=1;
        for(int i=1;i<=n;i++)
            if(a[i]%mod==reader)
            {
                printf("%d
"
,a[i]); f=0; break; } if(f) printf("-1
"
); } return 0; }