1055ザ・世界で最も豊かな(25point(S))

まず第一に、神は、最初の劉さんのブログを掲載しました

https://www.liuchuo.net/これはアドレスです

良いブラシPTA、強く推奨柳神、およびアルゴリズムのメモをブログしたいです

オリジナルタイトル

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

入力仕様:

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

出力仕様:

各クエリ、行の最初の印刷のためのクエリ数は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

次の単語

クエリのクエリ

純資産純資産

アルファベット

効果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;
}

おすすめ

転載: www.cnblogs.com/a-small-Trainee/p/12452585.html