#include #include using namespace std;

const int maxn = 10010; double a[maxn]; // a数组用来存储每个人的得分 int b[maxn]; // b数组用来存储每个人的参赛次数 int r[maxn]; // r数组用来存储每个人的编号

void init(int n){ // 初始化r数组 for(int i = 1; i <= n; i++) r[i] = i; }

bool cmp(int x, int y){ // 比较函数,用来排序 if(abs(a[x]-a[y]) > 0.01) // 如果两个人的得分相差大于0.01 return a[x] > a[y]; // 则按照得分从高到低排序 if(abs(b[x]-b[y]) > 0.01) // 如果两个人的得分相差小于0.01,但是参赛次数不相等 return b[x] > b[y]; // 则按照参赛次数从高到低排序 return x < y; // 如果两个人的得分和参赛次数都相等,则按照编号从小到大排序 }

int main(){ int n; cin >> n; for(int i = 1; i <= n; i++){ int k; cin >> k; for(int j = 1; j <= k; j++){ int ni, pi; cin >> ni >> pi; double py = pi * 1.0 / 100; // 将百分比转化为小数 a[ni] += py; // 第ni个人得分增加py a[i] -= py; // 第i个人得分减少py b[ni]++; // 第ni个人的参赛次数加1 } } init(n); // 初始化r数组 sort(r + 1, r + n + 1, cmp); // 根据比较函数对r数组进行排序 for(int i = 1; i <= n; i++) printf("%d %.2lf\n", r[i], a[r[i]]); // 输出每个人的编号和得分 return 0;

C++ 编程:使用注释优化得分排名算法

原文地址: https://www.cveoy.top/t/topic/qjaM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录