zoukankan      html  css  js  c++  java
  • NOIP2007 T1奖学金 解题报告-S.B.S.

    洛谷P1093

    题目描述

      某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。 
      任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是: 
      7 279
      5 279 
      这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是:
      5 279 
      7 279 
      则按输出错误处理,不能得分。

    输入输出格式

    输入格式:

      输入文件scholar.in包含n+1行: 
      第1行为一个正整数n,表示该校参加评选的学生人数。 
      第2到n+1行,每行有3个用空格隔开的数字,每个数字都在0到100之间。第j行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为1~n(恰好是输入数据的行号减1)。 
      所给的数据都是正确的,不必检验。 

    //感谢 黄小U饮品 修正输入格式

    输出格式:

      输出文件scholar.out共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。

    输入输出样例

    输入样例#1:

    【输入样例1】
    6
    90 67 80
    87 66 91
    78 89 91
    88 99 77
    67 89 64
    78 89 98
    【输入样例2】
    8
    80 89 89
    88 98 78
    90 67 80
    87 66 91
    78 89 91
    88 99 77
    67 89 64
    78 89 98

    输出样例#1:

    【输出样例1】
    6 265
    4 264
    3 258
    2 244
    1 237
    【输出样例2】
    8 265
    2 264
    6 264
    1 258
    5 258





    优先队列大法好...
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    using namespace std;
    struct node
    {
        int xuehao;
        int chinese;
        int math;
        int english;
        int total;
        node(){xuehao=chinese=math=english=total=0;}
    }s[10001];
    struct cmp
    {
        bool operator()(const node &a,const node &b)
        {
            if(a.total<b.total) return true;
            if(a.total>b.total) return false;
            if(a.chinese<b.chinese) return true;
            if(a.chinese>b.chinese) return false;
            return false;
        }
    };
    int main()
    {
        int n,m;
        priority_queue<node,vector<node>,cmp> d;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            s[i].xuehao=i;
            cin>>s[i].chinese>>s[i].math>>s[i].english;
            s[i].total=s[i].chinese+s[i].math+s[i].english;
            d.push(s[i]);
        }
        for(int j=1;j<=5;j++)
        {
            cout<<d.top().xuehao<<" "<<d.top().total<<endl;
            d.pop();
        }
        return 0;
    }
  • 相关阅读:
    ASP.NET CORE 使用Consul实现服务治理与健康检查(2)——源码篇
    ASP.NET CORE 使用Consul实现服务治理与健康检查(1)——概念篇
    Asp.Net Core 单元测试正确姿势
    如何通过 Docker 部署 Logstash 同步 Mysql 数据库数据到 ElasticSearch
    Asp.Net Core2.2 源码阅读系列——控制台日志源码解析
    使用VS Code 开发.NET CORE 程序指南
    .NetCore下ES查询驱动 PlainElastic .Net 升级官方驱动 Elasticsearch .Net
    重新认识 async/await 语法糖
    EF添加
    EF修改部分字段
  • 原文地址:https://www.cnblogs.com/SBSOI/p/5575038.html
Copyright © 2011-2022 走看看