• PAT甲级1137Final Grading


    题目链接

    https://pintia.cn/problem-sets/994805342720868352/problems/994805345401028608

    题解

    题目要求

    • 要获得证书,一个学生的在线编程作业至少要拿到200分,最后评分G至少要拿到60分。

      如果期中分数大于期末分数,则G等于期中成绩乘以40%+期末成绩乘以60%,否则G等于期末成绩

    • 输入

      • 第一行

        三个数字,都不超过10000

        • P:完成网上在线作业的学生的数量
        • M:参加期中考试的学生的数量
        • N:参加期末考试的学生的数量
      • P个学生网上在线作业的成绩

      • M个学生期中考试的成绩

      • N个学生期末考试的成绩

    • 输出

      输出获得证书的学生的ID及其3个成绩,按G(四舍五入到整数)降序输出,如果G相等,则按ID升序输出。如果某学生某些成绩不存在,则输出-1

    英语

    • assignment

      工作、任务

      分配、指派

    • certificate

      证明

    • round

      四舍五入

    思路

    1. 先读取在线编程作业分数,如果小于200,就不记录该学生的信息
    2. 在第一步记录的学生范围内,记录其期中分数
    3. 在第一步记录的学生范围内,记录其期末分数,同时计算其最后分数G,如果G大于60,则存入vector
    4. 将vector排序
    5. 输出

    代码

    // Problem: PAT Advanced 1137
    // URL: https://pintia.cn/problem-sets/994805342720868352/problems/994805345401028608
    // Tags: unordered_map vector sort
    
    #include <iostream>
    #include <unordered_map>
    #include <algorithm>
    #include <string>
    #include <vector>
    #include <cmath>
    using namespace std;
    
    struct Student{
        string id;
        int gp=-1;
        int gm=-1;
        int gf=-1;
        int g=-1;
    };
    
    bool studentCmp(Student& s1, Student& s2){
        return s1.g == s2.g ? s1.id < s2.id : s1.g > s2.g;
    }
    
    int main()
    {
        int p, m, n;
        unordered_map<string, Student> students_map;
        cin >> p >> m >> n;
        
        string str;
        int score;
        for (int i = 0; i < p; i++){
            cin >> str >> score;
            if (score >= 200){  // 在线编程分数大于200才行(不允许该分数不存在)
                students_map[str].id = str;
                students_map[str].gp = score;
            }
        }
        for (int i = 0; i < m; i++){
            cin >> str >> score;
            if (students_map.find(str) != students_map.end()) // 避免创建新的学生
                students_map[str].gm = score;
        }
        vector<Student> students_vec;
        for (int i = 0; i < n; i++){
            cin >> str >> score;
            if (students_map.find(str) != students_map.end()){ // 避免创建新的学生
                students_map[str].gf = score;
                if (students_map[str].gm > students_map[str].gf)
                    students_map[str].g = round(students_map[str].gm * 0.4 + students_map[str].gf * 0.6);
                else
                    students_map[str].g = students_map[str].gf;
                if (students_map[str].g >= 60)
                    students_vec.push_back(students_map[str]);
            }
        }
    
        sort(students_vec.begin(), students_vec.end(), studentCmp);
    
        for (auto it = students_vec.begin(); it != students_vec.end(); it++)
            printf("%s %d %d %d %d
    ", it->id.c_str(), it->gp, it->gm, it->gf, it->g);
        return 0;
    }
    

    参考链接

    https://blog.csdn.net/weixin_44385565/article/details/88669948

    https://blog.csdn.net/liuchuo/article/details/79064895


    作者:@臭咸鱼

    转载请注明出处:https://www.cnblogs.com/chouxianyu/

    欢迎讨论和交流!


  • 相关阅读:
    [Codeforces967C]Stairs and Elevators(二分查找)
    [Codeforces976E]Well played!(贪心)
    [USACO12JAN]视频游戏的连击Video Game Combos(AC自动机+DP)
    [HDU2222]Keywords Search(AC自动机)
    [BZOJ1030][JSOI2007]文本生成器(AC自动机+DP)
    基于ZooKeeper实现——分布式锁与实现
    基于Redis实现——分布式锁与实现
    java 接口请求返回通用json
    Java SHAA加密
    (转)一些牛人榜样,多看看他们写的东西(后续整理牛人的blog等)
  • 原文地址:https://www.cnblogs.com/chouxianyu/p/13580283.html
Copyright © 2020-2023  润新知