保存輸入,篩選出要輸出的,進行排序即可
#include<iostream>#include<vector>#include<algorithm>using namespace std;int p[5];//保存題目的滿分成績int N, K, M;struct node { vector<int> grade;//保存各科成績 int id; int rank;//排名 int sum;//總分 int P_num;//滿分成績數 bool is_show;//是否進行輸出 node() { is_show = false; sum = 0;P_num = 0;grade.assign(K, -1); } bool Operator<(const node that) const {//按題目要求排序 return sum>that.sum || (sum == that.sum && P_num>that.P_num) || (sum == that.sum && P_num == that.P_num && id < that.id); }};vector<node> f;//所有的輸入vector<node> r;//要輸出的學生int main(){ cin >> N >> K >> M; for (int t = 0;t < K;t++) cin >> p[t]; f.resize(N); while (M--)//保存輸入 { int a, b, c; cin >> a >> b >> c; f[a-1].id = a; if (c == -1 && f[a - 1].grade[b - 1] == -1) f[a - 1].grade[b - 1] = 0; if (c > f[a - 1].grade[b - 1]) { f[a - 1].is_show = true; if (c == p[b - 1]) f[a - 1].P_num++; if (f[a - 1].grade[b - 1] == -1) { f[a - 1].sum += c;f[a - 1].grade[b - 1] = c; } else { f[a - 1].sum += c- f[a - 1].grade[b - 1];f[a - 1].grade[b - 1] = c; } } } for (auto x : f)//對輸入進行篩選 if (x.is_show == true) r.push_back(x); sort(r.begin(), r.end()); r[0].rank = 1;//成績排名編號 for (int t = 2;t <= r.size();t++) if (r[t - 1].sum == r[t - 2].sum) r[t - 1].rank = r[t - 2].rank; else r[t - 1].rank = t; for (auto x : r)//輸出 {新聞熱點
疑難解答