PATアドバンスト1055世界で最も豊かな(25分)

フォーブス誌は毎年、世界の裕福な人々の年間ランキングに基づいて、億万長者のリストを公開しています。今、あなたはこの仕事をシミュレートするが、唯一の年齢層の特定の範囲の人々に集中することになっています。それはの純資産与えられた、ある  Nの人々 、あなたが見つけなければならない  彼らの年齢の与えられた範囲内でM裕福な人を。

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は、2つの正の整数含ま:  N(≤) -人の総数、及び  K(≤) -クエリの数。その後、  N行は、それぞれが[に名前(スペースなしなし以上8文字以内の文字列)、年齢(整数(0、200])、および純資産(整数が含まれ、続く- 。)]人の最後にあります  クエリのK線は、それぞれ3つの正の整数含ま:  M(≤) -出力の最大数、および[ Amin、  Amax。年齢の範囲である]の行のすべての数字は、スペースで区切られています。

出力仕様:

各クエリ、行の最初の印刷のための   クエリ数は1、出力から開始される  範囲の年齢を有するM裕福な人々を、[ 、  ]。各個人の情報は形式で、行を占めていますCase #X:XAminAmax

Name Age Net_Worth
 

出力は純資産の非昇順でなければなりません。場合等しいworthsがあり、それは年齢の非減少順でなければなりません。worthsと年齢の両方が同じである場合、出力は名前のアルファベット順に非減少でなければなりません。何の二人は、すべての3つの情報の同じ共有していないがあることが保証されています。場合には誰もが、出力は検出されませんでした  None

サンプル入力:

12 4
Zoe_Bill 35 2333
Bob_Volk 24 5888
Anny_Cin 95 999999
Williams 30 -22
Cindy 76 76000
Alice 18 88888
Joe_Mike 32 3222
Michael 5 300000
Rosemary 40 5888
Dobby 24 5888
Billy 24 5888
Nobody 5 0
4 15 45
4 30 35
4 5 95
1 45 50
 

サンプル出力:

Case #1:
Alice 18 88888
Billy 24 5888
Bob_Volk 24 5888
Dobby 24 5888
Case #2:
Joe_Mike 32 3222
Zoe_Bill 35 2333
Williams 30 -22
Case #3:
Anny_Cin 95 999999
Michael 5 300000
Alice 18 88888
Cindy 76 76000
Case #4:
None

余分なコピー:タイムアウトの理由を分析

vector.push_back(TMP);あなたのコードでは、scanf関数( "XX"、&tmp.xx)ではありません。

これは非常に時間のかかる余分なコピーであります

書式#include <iostreamの> 
の#include <アルゴリズム>
 使用して 名前空間はstdを、
構造体PEO {
     文字列名。
    int型の年齢、net_worth。
} V [ 100005 ]。
整数 N、K、M、after_m、_max、_min、P = 0 ブールCMP(PEO P1、P2 PEO){
     場合(p1.net_worth = p2.net_worth!)リターン p1.net_worth> p2.net_worth。
    もし(p1.age = p2.age!)リターン p1.age < p2.age。
    リターン p1.name < p2.name。
} 
int型のmain(){
    のscanf("%D%D "、&​​N&K)。
    一方、(N-- ){ 
        V [P] .name.resize(10 )。
        scanf関数(" %sの%D%D "、V [P] .name.c_str()、&V [P] .age、&V [P] .net_worth)。
        P ++ ; 
    } 
    ソート(V、V + P、CMP)。
    以下のためにINT iが= 1 ; I <= K; I ++ ){ 
        scanf関数(" %D%D%D "、&​​M、&_min、&_max)。
        printf(" ケース#%dの:\ nは"
        after_m  =M;
        INT J = 0 ; J <P; J ++ 場合(V [J] .age> = _min && V [J] .age <= _max)
                 であれば(after_m--)のprintf(" %sの%D%D \ n " 、V [J] .name.c_str()、V [J] .age、V [J] .net_worth)。
                他に 休憩;
        もし(M == after_m)のprintf(" なし\ N " ); 
    } 
    システム(一時停止)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/littlepage/p/12350699.html