奥运排序问题

复制大佬的,只是为了方便下次找到。
作者:天天坚持学习
链接:https://www.nowcoder.com/discuss/353150180096679936
来源:牛客网
/*对评论区大佬肆年的代码的改进,思想就是肆年的思想,没有什么不同。原代码是有问题的,只是测试用例测试不出来。原代码只适用于n=m的情况。当n!=m时,正常情况下输出结果是错误的,只不过唯一的n!=m的输入用例的输出结果也是正确的*/

#include <bits std=""> c++.h> </bits>

using namespace std;

int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        int nat[n][3];      //存储金牌,奖牌,人口
        for(int i=0;i<n;i++)
        {
            cin>>nat[i][0]>>nat[i][1]>>nat[i][2];
        }
        float obj[n][4];    //存储金牌,奖牌,金牌人口比,奖牌人口比
        for(int i=0;i<n;i++)
        {
            obj[i][0]=nat[i][0];
            obj[i][1]=nat[i][1];
            obj[i][2]=nat[i][0]?obj[i][0]/nat[i][2]:0;   //这里有小问题,比如 4 7 0和 5 8 0,当有很多NAN时,这个找不出来真实的排名
            obj[i][3]=nat[i][1]?obj[i][1]/nat[i][2]:0;
        }
        int ranking[n][4];    //记录所有国家的排名情况,输出时+1
        for(int i=0;i<n;i++)
            for(int j=0;j<4;j++)
                ranking[i][j]=0;
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                for(int x=0;x<4;x++)
                    if(obj[j][x]>obj[i][x])
                        ranking[i][x]++;
        for(int i=0;i<m;i++)    //输出要求的m个国家的排名
        {
            int temp;           //存储要输出的国家号
            cin>>temp;
            int mi=0;
            for(int j=1;j<4;j++)
                if(ranking[temp][j]<ranking[temp][mi])
                    mi=j;
            printf("%d:%d\n",ranking[temp][mi]+1,mi+1);
        }
        cout<<endl;
    }

全部评论
楼主厉害啊
点赞 回复 分享
发布于 2022-10-13 23:07 山西

相关推荐

勇敢的联想人前程似锦:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务