1062 Talent and Virtue (25 point(s))
题解
STL应用与排序。
#include<iostream>
#include<vector>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node {
int id, talent, virtue;
bool operator < (const node& rhs) const {
if(talent + virtue != rhs.talent + rhs.virtue) return talent + virtue > rhs.talent + rhs.virtue;
else if(virtue != rhs.virtue) return virtue > rhs.virtue;
return id < rhs.id;
}
}temp;
int n, L, H;
vector<node> res[4];
int main() {
scanf("%d%d%d", &n, &L, &H);
int total = n;
for(int i = 0; i < n; ++i) {
scanf("%d%d%d", &temp.id, &temp.virtue, &temp.talent);
if(temp.virtue < L || temp.talent < L) {
--total;
continue;
}
if(temp.talent >= H && temp.virtue >= H) res[0].push_back(temp);
else if(temp.virtue >= H && temp.talent < H) res[1].push_back(temp);
else if(temp.virtue < H && temp.talent < H && temp.virtue >= temp.talent) res[2].push_back(temp);
else res[3].push_back(temp);
}
printf("%d\n", total);
for(int i = 0; i < 4; ++i) {
sort(res[i].begin(), res[i].end());
for(int j = 0; j < res[i].size(); ++j) printf("%08d %d %d\n", res[i][j].id, res[i][j].virtue, res[i][j].talent);
}
return 0;
}