NOIP 2017普及組再試合T 2
4420 ワード
[NOIP 2017普及グループ]T 2図書管理者
タイトルの説明
図書館には本ごとに図書コードがあり、図書を迅速に検索するために使用することができます.この図書コードは正の整数です.本を借りた読者一人一人の手には需要コードがあり、この需要コードも正の整数です.もし1冊の本の図書コードがちょうど読者の需要コードで終わるならば、この本はこの読者が必要とするものです.Dさんは図書館の管理人になったばかりで、彼女は図書館のすべての本の図書のコードを知っていて、彼女はあなたにプログラムを書いてもらって、すべての読者に対して、彼の必要な本の中で図書のコードが一番小さい本を求めて、もし彼の必要な本がなければ、-1を出力してください.
入力
1行目は、2つの正の整数nとqを含み、図書館の本の数と読者の数を表す1つのスペースで分かれています.次のn行は、各行に正の整数が含まれており、図書館のある本の図書コードを表しています.次のq行は、各行に2つの正の整数を含み、1つのスペースで分けられ、1つ目の正の整数は図書館の読者の需要コードの長さを表し、2つ目の正の整数は読者の需要コードを表す.
しゅつりょく
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
NOIP 2017普及グループのT 2です.文字列の比較(整数で比較する人もいるかもしれませんが、先頭ゼロがある可能性があるので、保険のために文字列を使います).
ぶんせき
私たちはまず文字列で各符号化を保存して、それから読者の需要符号とこの符号化の末尾を比較することができて、もし同じならば、まずこの文字列を整数にして保存して(もちろん化しなくてもいいですが、小編はその比較文字列の大きさの関数を覚えられません)、繰り返し操作して最小値を取ります.
コード#コード#
#include
#include
#include
#include
#include
using namespace std;
char a[1003][1003],b[11];
int len,t,n,q,Min;
int main()
{
//freopen("librarian.in","r",stdin);
//freopen("librarian.out","w",stdout);
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
scanf("%s",a[i]+1);
for(int i=1;i<=q;i++)
{
scanf("%d%s",&len,b+1);
Min=INT_MAX;
for(int j=1;j<=n;j++)
{
int len1=strlen(a[j]+1),Time=len1-len+1,flag=0,l=len,x=1,flat=1;
t=0;
for(int k=len1;k>=Time;k--)
{flat=0;if(a[j][k]!=b[l--]) {flag=1;break;}}
if(!flag&&!flat)
{
for(int k=len1;k>=1;k--)
t+=(a[j][k]-'0')*x,x*=10;
if(tif(Min==INT_MAX) Min=-1;
printf("%d
",Min);
}
return 0;
}
もっとブログを見て