まず第一に、神は、最初の劉さんのブログを掲載しました
https://www.liuchuo.net/これはアドレスです
良いブラシPTA、強く推奨柳神、およびアルゴリズムのメモをブログしたいです
オリジナルタイトル
フォーブス誌は毎年、世界の裕福な人々の年間ランキングに基づいて、億万長者のリストを公開しています。今、あなたはこの仕事をシミュレートするが、唯一の年齢層の特定の範囲の人々に集中することになっています。それはの純資産与えられた、あるNの人々 、あなたが見つけなければならないM年齢の与えられた範囲で最も裕福な人々を。
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は、2つの正の整数含まN -人の合計数、および(≤105)K(≤103) -クエリの数。その後、N行はそれぞれの名前(スペースなしなし以上8文字以内の文字列)、年齢((0、200]の整数)、および人物の純資産([-106106]の整数)が含まれ、従ってください。最後にありあるKのクエリの線は、それぞれ3つの正の整数含ま:M(≤100) -出力の最大数、および[ Amin
、Amax
。年齢の範囲である]の行のすべての番号がスペースで区切られています。
出力仕様:
各クエリ、行の最初の印刷のためのクエリ数は1、出力から開始されるMの範囲で年齢と最も豊かな人々を、[ 、]。各個人の情報は形式で、行を占めていますCase #X:
X
Amin
Amax
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
次の単語
クエリのクエリ
純資産純資産
アルファベット
効果YIの対象
これは、K、Nを与えることです
Nは、入力数である名前、年齢、お金を持っています
Kは、最大出力範囲内の人、範囲を下回る全ての範囲であります
コードは以下の通りです
#include<iostream>
#include<vector>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
struct node {
char name[10];
int age, net_worth;
};
bool cmp(node a, node b) {
if (a.net_worth != b.net_worth)
return a.net_worth > b.net_worth;
else if (a.age != b.age)
return a.age < b.age;
else
return strcmp(a.name, b.name)<=0;
}
int main(void) {
int N, K;
scanf("%d%d", &N, &K);
vector<node>data;
for (int i = 0; i < N; i++) {
node t;
scanf("%s%d%d", &t.name, &t.age, &t.net_worth);
if (t.age > 0 && t.age <= 200) data.push_back(t);
}
sort(data.begin(), data.end(), cmp);
int M, Amin, Amax,t;
for (int i = 0; i < K; i++) {
t = 0;
scanf("%d%d%d", &M, &Amin, &Amax);
printf("Case #%d:\n", i + 1);
bool judge = false; //默认为false;
for (int j = 0; j < data.size(); j++) {
if (data[j].age >= Amin && data[j].age <= Amax) {
printf("%s %d %d\n", data[j].name, data[j].age, data[j].net_worth);
judge = true; //有输出了
t++;
if (t == M) {
break;
}
}
}
if (!judge) {
printf("None\n");
}
}
return 0;
}