思路:
建立四个vector,通过插入排序进行排列或者自己创造链表进行插入排序。
代码:
#include <iostream> #include <vector> #include <queue> using namespace std; int N, L, H; struct Student { int Num, talent, moral; }; vector<Student> People_Type[4]; Student Initial[100000]; void Insert(int type,Student stu) { int i = 0; for (; i < People_Type[type].size(); i++) { if ((People_Type[type][i].talent + People_Type[type][i].moral) == (stu.moral + stu.talent)) { if ((People_Type[type][i].moral == stu.moral && People_Type[type][i].Num > stu.Num) || People_Type[type][i].moral < stu.moral) { //i--; break; } } else if ((People_Type[type][i].talent + People_Type[type][i].moral) < (stu.moral + stu.talent)) { //i--; break; } } People_Type[type].insert(People_Type[type].begin()+i, stu); } int main() { cin >> N >> L >> H; for (int i = 0; i < N; i++) { cin >> Initial[i].Num >> Initial[i].moral >> Initial[i].talent; } int count = 0; for (int i = 0; i < N; i++) { if (Initial[i].talent >= L && Initial[i].moral >= L) { ++count; if (Initial[i].talent >= H && Initial[i].moral >= H) { Insert(0, Initial[i]); } else if (Initial[i].moral >= H) { Insert(1, Initial[i]); } else if (Initial[i].moral >= Initial[i].talent) { Insert(2, Initial[i]); } else { Insert(3, Initial[i]); } } } cout << count << endl; for (int i = 0; i < 4; i++) { for (int j = 0; j < People_Type[i].size(); j++) cout << People_Type[i][j].Num << " " << People_Type[i][j].moral << " " << People_Type[i][j].talent << endl; } }
