PATクラス1029の中央値(25ポイント)(質問を考えて、2つのキューの中央値を見つける、とは思いませんでした)*

1029 Median (25 分)
 

N個の整数の増加シーケンスSを考えると、中央値は、中間位置の数です。例えば、S1 = {11、12、13、14}の中央値は12であり、S2の中央値= {9、10、15、16、17}は2つの配列の中央値は、であると定義される15であります両方の配列のすべての要素が含まれている非減少列の中央値。例えば、S1及びS2の中央値は13です。

整数のシーケンスを上げる2を考えると、あなたはそれらの中央値を見つけることが求められます。

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。各ケースは、各シーケンスの情報を提供し、2行を占めます。各配列について、最初の正の整数N(≤)はその配列のサイズです。そして、N個の整数は、スペースで区切って、従ってください。すべての整数は、long int型の範囲内にあることが保証されています。

出力仕様:

各テストケースのためにあなたは、出力はラインで与えられた二つの系列の中央値必要があります。

サンプル入力:

4 11 12 13 14
5 9 10 15 16 17

サンプル出力:

13

 

質問の意味:

与えられた2つのソート順序、2つの配列が組み合わされた後、中間シーク

 

アイデア:

配列、二番目の配列処理をオンラインで開きます。それぞれ第2の配列(添字1から始まる)は、N M要素、中間位置の数(N + M + 1)/ 2を有しています。多数の小さい限り、(N + M + 1)ライン〜合計数のカウント、TEMPが読み出され、各二番目の配列から最初の配列ポインタI、に提供され、最初のチェックで/ 2を位置決め最初のいくつかの数字の配列は、+ 1をカウントする小さな温度より小さくなく、出力に、中間のカウント値か否かを判断します。数が中間一時Noに完全な数よりも小さい場合、+ 1をカウントし、チェックは中間温度ではありません出力です。上記プロセスサイクル。二番目の配列を読み終え、及び中間位置までの残りの説明では、中間、中間番号最初の配列の数は、アレイ内の残りの数をカウントする場合

 

ACコード:

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
typedefの長い 長いLL。
INT [ 200005 ]。
INT のmain()
{ 
    int型N、M。
    cinを >> N;
    以下のためにint型 i = 1 ; iが<= N; iは++ 
    { 
        CIN >> [I]。
    } 
    [N + 1 ] = 0x7FFFFFFFで
    cinを >> メートル。
    INT半ば=(N + M + 1)/ 2 int型のk = 1、=カウント0を以下のためにint型 iは= 1 ; I <= M iは++ 
    { 
        LLのX。
        cinを >> X;
        一方、([K] < X){ 
            カウント ++ もし(カウント== MID){ 
                COUT << [K]。
            } 
            K ++ 
        } 
        カウント ++ ;
        もし(カウント== 中旬){ 
            coutの << X。
        }     
    } 
    // 二番目の配列を読み終え、中間の数、カウント場合
     // 配列に中間位置に番号の残りの部分の最初のアレイ内の残りの中間の数字で記載し、
    一方(COUNT <= MID){ 
        COUNT ++ ;
         IF(COUNT == MID){ 
            COUT << [K]; 
        } 
        K ++ ;         
    } 
    戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/caiyishuai/p/11372381.html