题解 | 奥运排序问题

#include<iostream>
#include<algorithm>

using namespace std;
struct country {
    int jin, jiang, num, pai; //金牌,奖牌,序号
    float jp, jiap; //金牌人口比,奖牌人口比
} a[1000];
struct pos {
    int num;
    int s1, s2, s3, s4; //四种排名
} b[1000];
bool cmp1(country c1, country c2) {
    return c1.jin > c2.jin;
}
bool cmp2(country c1, country c2) {
    return c1.jiang > c2.jiang;
}
bool cmp3(country c1, country c2) {
    return c1.jp > c2.jp;
}
bool cmp4(country c1, country c2) {
    return c1.jiap > c2.jiap;
}
int main() {
    int n, m;
    while (scanf("%d%d", &n, &m) != EOF) {
        int temp;
        for (int i = 0; i < n; i++) {
            cin >> a[i].jin >> a[i].jiang >> temp;
            a[i].jp = (float)a[i].jin / temp;
            a[i].jiap = (float)a[i].jiang / temp;
            a[i].num = i;
        }
        for (int i = 0; i < m; i++) {
            cin >> b[i].num;
        }
        sort(a, a + n, cmp1); //按金牌排序
        for (int i = 0; i < n; i++) { //1.解决1,2,2,4情况
            if (i > 0 && a[i].jin == a[i - 1].jin) {
                a[i].pai = a[i - 1].pai;
            } else a[i].pai = i + 1;
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (b[i].num == a[j].num)b[i].s1 =
                        a[j].pai; // 2,解决根据编号查排名情况。
            }
        }
        sort(a, a + n, cmp2); //按奖牌排序
        for (int i = 0; i < n; i++) {
            if (i > 0 && a[i].jiang == a[i - 1].jiang) {
                a[i].pai = a[i - 1].pai;
            } else a[i].pai = i + 1;
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (b[i].num == a[j].num)b[i].s2 =
                        a[j].pai; // 2,解决根据编号查排名情况。
            }
        }
        sort(a, a + n, cmp3); //按金牌人口比例排序
        for (int i = 0; i < n; i++) {
            if (i > 0 && a[i].jp == a[i - 1].jp) {
                a[i].pai = a[i - 1].pai;
            } else a[i].pai = i + 1;
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (b[i].num == a[j].num)b[i].s3 =
                        a[j].pai; // 2,解决根据编号查排名情况。
            }
        }
        sort(a, a + n, cmp4); //按奖牌人口比例排序
        for (int i = 0; i < n; i++) {
            if (i > 0 && a[i].jiap == a[i - 1].jiap) {
                a[i].pai = a[i - 1].pai;
            } else a[i].pai = i + 1;
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (b[i].num == a[j].num)b[i].s4 =
                        a[j].pai; // 2,解决根据编号查排名情况。
            }
        }
        for (int i = 0; i < m; i++) {
            int mind = n + 1, flag;
            if (mind > b[i].s1) {
                mind = b[i].s1;
                flag = 1;
            }
            if (mind > b[i].s2) {
                mind = b[i].s2;
                flag = 2;
            }
            if (mind > b[i].s3) {
                mind = b[i].s3;
                flag = 3;
            }
            if (mind > b[i].s4) {
                mind = b[i].s4;
                flag = 4;
            }
            cout << mind << ":" << flag << endl;
        }

    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
4018次浏览 46人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16907次浏览 137人参与
# 米连集团26产品管培生项目 #
7310次浏览 226人参与
# 春招至今,你的战绩如何? #
15816次浏览 145人参与
# 你的实习产出是真实的还是包装的? #
3098次浏览 53人参与
# 沪漂/北漂你觉得哪个更苦? #
1553次浏览 41人参与
# MiniMax求职进展汇总 #
25165次浏览 322人参与
# HR最不可信的一句话是__ #
1091次浏览 32人参与
# AI面会问哪些问题? #
946次浏览 23人参与
# 你做过最难的笔试是哪家公司 #
1247次浏览 22人参与
# AI时代,哪个岗位还有“活路” #
2853次浏览 51人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152905次浏览 889人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
8021次浏览 43人参与
# XX请雇我工作 #
51155次浏览 171人参与
# 简历第一个项目做什么 #
32148次浏览 361人参与
# 简历中的项目经历要怎么写? #
311051次浏览 4265人参与
# 投格力的你,拿到offer了吗? #
178339次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
76981次浏览 375人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187605次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64760次浏览 890人参与
# 如果重来一次你还会读研吗 #
230018次浏览 2011人参与
# 正在春招的你,也参与了去年秋招吗? #
364353次浏览 2642人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务