注:本以为考察二分法,结果并不是( ´◔ ‸◔’)
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <string.h>
using namespace std;
typedef struct People {
char name[9];
int age;
int worth;
} People;
vector<People> v;
bool cmp_worth(People a, People b) {
if (a.worth > b.worth) return true;
else if (a.worth == b.worth && a.age < b.age) return true;
else if (a.worth == b.worth && a.age == b.age && strcmp(a.name, b.name) < 0) return true;
else return false;
}
int main(int argc, char *argv[]) {
int n, k;
scanf("%d %d", &n, &k);
int i, j;
for (i = 0; i < n; i++) {
People p;
scanf("%s %d %d", p.name, &p.age, &p.worth);
v.push_back(p);
}
sort(v.begin(), v.end(), cmp_worth);
int num, amin, amax;
bool flag;
for (i = 0; i < k; i++) {
printf("Case #%d:\n", i + 1);
scanf("%d %d %d", &num, &amin, &amax);
flag = false;
for (j = 0; j < v.size() && num > 0; j++) {
if (v[j].age >= amin && v[j].age <= amax) {
printf("%s %d %d\n", v[j].name, v[j].age, v[j].worth);
num--;
flag = true;
}
}
if (flag == false) printf("None\n");
}
return 0;
}