1 条题解
-
0
C++ :
#include<bits/stdc++.h> using namespace std; const int maxn = 1e4 + 10; struct student { int id, c, m, e, total, highest, sum; /*id为输入顺序,c,m,e含义如题所述,total记录总分, highest记录语文和数学的最高分,sum记录语文和数学的总分*/ } a[maxn]; int n, p = 1; //p记录用到了第几个位置 int k; int ans[maxn], last; bool cmp(student a, student b) {//排序代码 if (a.total > b.total) return 1;//比较总分 else if (a.total < b.total) return 0; else { if (a.sum > b.sum) return 1;//比较语文数学分数和 else if (a.sum < b.sum) return 0; else { if (a.highest > b.highest) return 1;//比较语文数学最高分 else if (a.highest < b.highest) return 0; else return a.id < b.id; } } } bool check(int num1, int num2) {//判断是否并列 if (a[num1].total == a[num2].total && a[num1].sum == a[num2].sum && a[num1].highest == a[num2].highest) return 1; else return 0; } int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i].c >> a[i].m >> a[i].e; a[i].id = i; a[i].total = a[i].c + a[i].m + a[i].e; a[i].highest = max(a[i].c, a[i].m); a[i].sum = a[i].c + a[i].m; } sort(a + 1, a + n + 1, cmp); ans[a[1].id] = 1; last = 1; for (int i = 2; i <= n; i++) { if (check(last, i)) {//有并列的学生 ans[a[i].id] = p;//记录排名 k++;//是并列的学生,累加k last = i; continue; } p += k + 1;//并列结束,新的占位 k = 0;//记得清空 ans[a[i].id] = p;//记录排名 last = i;//更新缓存信息 } for (int i = 1; i <= n; i++ ) { cout << ans[i] << endl; } return 0; }
信息
- ID
- 5652
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者