#include <cmath>
#include <vector>
#include <climits>
#include <iostream>
#include <string>
#include <map>
#include <queue>
#include <algorithm>
using namespace std;
class Richer {
public:
string name;
int age;
int worth;
};
bool compareAge(Richer r1, Richer r2) {
return r1.age < r2.age;
}
bool compareWorth(Richer r1, Richer r2) {
if (r1.worth != r2.worth) return r1.worth > r2.worth;
else if (r1.age != r2.age) return r1.age < r2.age;
else return r1.name < r2.name;
}
int main() {
const int AMAX = 201;
int N, K;
cin >> N >> K;
vector<Richer> fobes(N), validFobes;
for (int i = 0; i < N; i++) {
cin >> fobes[i].name >> fobes[i].age >> fobes[i].worth;
}
sort(fobes.begin(), fobes.end(), compareWorth);
vector<int> ages(AMAX, 0);
for (int i = 0; i < fobes.size(); i++) {
int age = fobes[i].age;
if (ages[age] < 100) {
ages[age] += 1;
validFobes.push_back(fobes[i]);
}
}
for (int i = 1; i <= K; i++) {
cout << "Case #" << i << ":" << endl;
int M, lower, higher;
cin >> M >> lower >> higher;
int printNumber = 0;
for (int i = 0; i < validFobes.size() && printNumber < M; i++) {
Richer richer = validFobes[i];
if (richer.age >= lower && richer.age <= higher) {
cout << richer.name << " " << richer.age << " " << richer.worth << endl;
printNumber += 1;
}
}
if (printNumber <= 0) {
cout << "None" << endl;
}
}
return 0;
}
这道题生动的表现了数据预处理对于直接肝代码的优越性。我果然落入了测试点二的陷阱。T^T
参考了 柳婼の博客