問題の説明
世界のすべての最も困難な問題AC後、ACboy 8006は、今は何の関係もありません。ある日、彼は.ITもNの本を持っているとM users.Theユーザーのidは1からMまでで、書籍IDは1からNまである大きなライブラリであるパートタイムの仕事を見つけるために、古いライブラリに行きます。ライブラリのルールによると、すべてのユーザーにのみ、彼を驚か何.But 9冊の本を借りるために許可されているが、ライブラリには、コンピュータがないことである、とすべてがちょうど紙に記録されています!どのように恐ろしい、私は数週間の作業の後にクレイジーでなければならない、彼は状況を変えようとしている。だから考えています。
一方で、8006のファンはそれを知った後、彼らはすべてのお金を収集し、ライブラリの多くのコンピュータを買います。
ハードウェアのほかに、ライブラリは、管理プログラムが必要です。それは8006のためのケーキのほんの一部ですが、ライブラリは助けを求め、あなたに優秀なプログラマになります。
彼らに必要なのは、単純なライブラリ管理プログラムです。それはちょうどコンソールプログラムである、とだけ3つのコマンドを持っている:、本を借りて本を返し、ユーザーを照会します。
ユーザID及び書籍ID:1.コマンドは、2つのパラメータがあり借用
フォーマットである"B UIのBI"(1 <= UI <= M、1 <= BI <= N)
プログラムは、最初の本のBIをチェックする必要がありますそれはライブラリにあります天気を。そうでない場合は、単にラインで「今すぐライブラリにありません」印刷します。
それがある場合には、ユーザーのUIを確認してください。
ユーザーはすでに9冊の本を借りている場合は、印刷は「あなたは、任意のより多くを借りることは許されません」。
そうでなければ、ユーザーのUIが本を借りると、印刷は「成功を借ります」。
2.戻り値は、コマンド一つのパラメータました:書籍ID
形式は次のとおりです。「R BI」(1 <= BI <= N)
プログラムは、最初の本は、それがライブラリにありますかbiは確認する必要があります。それがある場合は、単に「本が図書館にすでにある」印刷します。そうしないと、あなたは本を返すことができ、印刷は「成功を返します」。
3.クエリコマンドは、1つのパラメータを有する:ユーザIDが
「QのUI」(1 <= UI <= M):フォーマットは、
そうでない場合、ユーザーUIが借りた書籍の数が0の場合、単に印刷「空」彼は空白でline.Seperate 2冊で昇順に借りブックIDを印刷します。
入力
入力ファイルは、一連のテストケースが含まれています。ファイルの最後に処理してください。最初の行は、2つの整数MとN(1 <= M <= 1000、1 <= N <= 100000)が含まれ、2行目はC、コマンド(1 <= C <= 10000)の数を意味する整数を含んでいます。そして、それはCラインを付属しています。各行はabove.Youはすべての書籍は、各例初めに、ライブラリにあるassumできる記述されているコマンドです。
出力
各コマンドのために、上記メッセージを表示します。
各テストの後に出力に空白行をしてください。
あなたはまだいくつかの質問を持っている場合は、サンプルを参照してください
サンプル入力
5 10 9 R 1つのB 1 5 B 1 2 Q 1 Q 2 R 5 、Q 1 、R 2 、Q 1 5 10 9 R 1 B 1 5 B 1 2 Q 1 Q 2 R 5 、Q 1 、R 2 、Q 1
サンプル出力
この本は、ライブラリにすでにある SU借りるCCESS 借用成功 2 5 空の 戻りSU CC ESS 2 リターンの成功 空の本がライブラリにすでにある 成功が借りる 成功借りる 2 5 空の 戻り値成功 2 のRet骨壷成功を 空// 巨大な入力、関数のscanf()はCINよりも良い仕事があり
ヒント
ヒント
純粋なシミュレーションタイトル
書式#include <iostreamの> の#include <アルゴリズム> 書式#include <CStringの> 使用して 名前空間はstdを、 int型のブック[ 101000 ]。 構造体ノード { INT X [ 10 ]。 int型のyを。 } P [ 1010 ]。 INT のmain() { int型N、M、B、U。 char型; 一方、(CIN >> N >> M) { memsetの(書籍、0、はsizeof (書籍))。 以下のための(int型 I = 0; I <= N。私は++ ) P [i]は.Y = 0 。 int型のトン。 cinを >> トン。 一方、(t-- ) { CIN >> 。 もし(== ' B ' ) { CIN >> U >> B。 もし(ブック[B]) プット(「今すぐ図書館ではありません」); 他の 場合(P [U] .Y> = 9 ) プット(「あなたは、任意のより多くを借りることが許可されていません」); 他 { P [U] .X [P [U] .Y ++] = B。 ブック[B] = U; プット(「成功を借ります」); } } そう であれば(== ' R ' ) { CIN >> B。 もし(ブック[B] == 0 ) プット(「本は図書館に既にあります" ); 他 { int型poit; uは = ブック[B]; ブック[B] = 0 ; のための(int型 I = 0 iがP [U] .Yを<; Iは++ ) { 場合(P [U] .X [ I] == B) { poit = I; 破る; } } のための(int型 1I = poit。私は、p [U] .y-を< 。I ++ ) P [U] .X [I] = P [U] .X [I + 1 ]。 P [U] .Y - 。 プット(「成功を返します」)。 } } そう であれば(== ' Q ' ) { CIN >> U。 もし(P [U] .Y == 0 ) プット(" 空" )。 他に { int型 B [ 10]; 以下のために(int型 i = 0 ; iは、P [U]は.Y <; iは++の) B [I] = P [U] .X [I]。 ソート(B、B + P [U] .Y)。 用(int型 iは= 0 ; iがP [U] .Yを<Iは++ ) { 場合(I == 0 ) COUT << B [i]は、 他の 裁判所未満 << " " << B [i]は、 } COUTてendl; << } } } COUT << ENDL。 } 戻り 0 。 }