【UVA - 10474】は?大理石である(排序)

マーブルはどこですか?

説明:

ラジュと  ミーナはビー玉で遊ぶのが大好き。彼らは彼らの上に書かれた数字でビー玉をたくさん持っています。初めに、  ラジュは、それらの上に書かれた数字の小さい順にビー玉を次々に置きます。そして、  ミーナは求めるだろう  、特定の番号を持つ最初の大理石を見つけるRajuto。彼女は1 ... 2 ... 3をカウントします。 ラジュは正解のための1つのポイントを取得し、  場合ミーナは、ポイントを取得します  ラジュに障害が発生しました。臨床試験の一部固定された数は、ゲームが終了し、最大のポイントを持つプレイヤーが勝利した後。今日ではと遊ぶためにあなたのチャンスです  ラジュ。スマートな子供なので、あなたは、コンピュータの好意を取ることと思います。しかし、過小評価しないでください ミーナは、彼女はあなたがすべての答えを与えるために取っているどのくらいの時間を追跡するためにプログラムを書いていました。だから今、あなたはあなたのような役割であなたを助けるプログラム、記述する必要があり  ラジュを。

入力

複数のテストケースが存在する場合があります。:テストケースの合計なしには各テストケースが構成されて65未満は2つの整数で始まりである  N  ビー玉の数と  Q  クエリの数はミナはなるだろう。次  のN  行は上に書か数字含んでいるでしょう  N個の  ビー玉を。これらの大理石の番号が特定の順序で来ることはありません。以下の  Qの  ラインがあります  Qの  問い合わせを。保証され、入力された数字はいずれも10000よりも大きくないと、それらのどれも否定しません。

入力は、テストケースによって終了される  N  = 0、  Q  = 0。

出力

各テストケース出力の場合の通し番号。

クエリの各々について、出力の一つの行を印刷します。この行の形式は、クエリ数がビー玉のいずれかの時に書かれているかどうかに依存します。二つの異なるフォーマットは以下の通りであります:

  • ` xは  で見出さ  Y番号の最初の大理石場合、」  xは  位置で発見された  Y位置は番号が付けられている  1、2、...、  N

  • ` xが  見つからない番号付きの大理石場合、」  xが  存在しません。

詳細については、サンプル入力に対する出力を見てください。

サンプル入力

4 1

2

3

5

1

5

5 2

1

3

3

3

1

2

3

0 0

サンプル出力

CASE#1:

4で発見5

CASE#2:

2が見つかりません

3は3で発見しました

トピックリンク:

https://vjudge.net/problem/UVA-10474

 

各大理石上の非負の整数を書いた既存の大理石、効果のN対象。まず、大量の注文に小型のそれぞれの数、そしてQの質問に答えます。各質問は、xの大理石を言ういくつかの整数x、そうであれば、上にも答えを言うの大理石があるかどうかを尋ねます。大理石は、左から右に第1〜Nにソートされています

2つの単純なソートする機能とLOWER_BOUND付き

ACコード

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <fstreamの> 
の#include <アルゴリズム> 
書式#include <cmath> 
の#include <両端キュー> 
の#include <ベクトル> 
の#include <キュー> 
の#include < 文字列 > 
の#include <CStringの> 
書式#include <マップ> 
書式#include <スタック> 
の#include < 設定 > 
書式#include <sstream提供>
 に#define MOD 1000000007
 の#define LL長い長い
 の#define 0x3f3f3f3f INF
 の#defineME0(X)のmemset(X、0、はsizeof(x))を
 使用して、 名前空間STDを、
int型N、Q;
int型 [ 10005 ];
int型の合計= 0 ;
INT メイン()
{ 
    一方(CIN >> N >> Q、N + Q)
    { 
        合計 ++ 
        ME0(A)。
        以下のためにint型 i = 0 ; iがNを<; I ++ 
            CIN >> [I]。
        ソート( + N)。// 排序 
        のprintf(" CASE#%dに:\ nを" 、合計)。
        同時に(Q - 
        { 
            int型NUM; 
            CIN >> NUM;
             // LOWER_BOUND(値を見つけるために、アドレス、終了アドレスを開始する) 
             // アドレス:前面開口部を閉じます。表示された位置に第1の値よりも大きいか等しい戻り
             // 値は、アレイ内のすべての要素よりも大きい場合、それはエンドアドレスを返します。
            INT T = LOWER_BOUND(A、A + N、NUM) - ;
             IF([T] == NUM)
                のprintf(" Dは、%Dの\のN末端で見出さ%"、NUM、T + 1 );
             
                のprintf(" % Dの\のN-が見つかりません、NUM); 
        } 
    } 

}

 

おすすめ

転載: www.cnblogs.com/sky-stars/p/10988482.html