ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

homework(结构体排序+map)

2021-04-10 20:00:45  阅读:219  来源: 互联网

标签:map 1054 int maxn 100 排序 86 93 homework


还挺有意思的一道题,值得记录。
大一上用二维数组过的,现在想想真是佩服。。。。一看就感觉要结构体排序,但是会出现同一学生有多道题分的情况,这样只用结构体很难处理,想了很久决定还是结合map来做吧。。。做的过程还是学到挺多东西的,但是这运行时间。。
在这里插入图片描述

Homework
题目描述

鉴于很多同学Ctrl+A,Ctrl+C,Ctrl+V的问题,Eric想重新计算一下作业成绩,成绩计算的规则如下:

每道题按正确提交的先后顺序给分,第1-12名32,13-24名16分,25-48名8分,49-96名4分,97-192名2分,其余1分。
学生所有题目的分数累加和为其积分。
作业成绩=round(100+log(1+本人积分−最高积分最高积分)×10),其中round为四舍五入取整,log以自然对数为底。
Eric已经通过查询数据库得到每个人每道题的排名情况,请写一个程序帮Eric算一下所有人的作业成绩。

输入 输入包含若干行,每行是三个部分,题目号,学号,排名。 学生人数不超过500,题目数量不超过200。
输出 输出学号和成绩,按成绩逆序,学号,并按作业成绩逆序,学号正序排列显示。

输入
1054 2015551111 1
1054 2015551101 2
1054 2015551119 3
1054 2015551115 4
1054 2015551110 5
1054 2015551114 6
1054 2015551128 7
1054 2015551118 8
1054 2015551102 9
1054 2015551130 10
1054 2015551139 11
1054 2015551135 12
1054 2015551120 13
1054 2015551129 14
1054 2015551104 15
1054 2015551112 16
1054 2015551116 17
1054 2015551138 18
1054 2015551103 19
1054 2015551131 20
1054 2015551132 21
1054 2015551106 22
1054 2015551136 23
1054 2015551124 24
1054 2015551126 25
1054 2015551113 26
1054 2015551109 27
1054 2015551117 28
1054 2015551125 29
1054 2015551127 30
1054 2015551123 31
1054 2015551133 32
1054 2015551134 33
1054 2015551121 34
1054 2015551122 35
1054 2015551137 36

输出
2015551101 100
2015551102 100
2015551110 100
2015551111 100
2015551114 100
2015551115 100
2015551118 100
2015551119 100
2015551128 100
2015551130 100
2015551135 100
2015551139 100
2015551103 93
2015551104 93
2015551106 93
2015551112 93
2015551116 93
2015551120 93
2015551124 93
2015551129 93
2015551131 93
2015551132 93
2015551136 93
2015551138 93
2015551109 86
2015551113 86
2015551117 86
2015551121 86
2015551122 86
2015551123 86
2015551125 86
2015551126 86
2015551127 86
2015551133 86
2015551134 86
2015551137 86

#include <bits/stdc++.h>
using namespace std;
const int N =1e5 + 10;
struct stu{
    string num;
    int score;
}s[N];
int maxn;
int comp(int x)
{
    return round(100 + log(1 + (double)(x - maxn) / maxn) * 10);
}
bool cmp(stu a, stu b)
{
    if(a.score > b.score) return 1;
    else if(a.score == b.score && a.num < b.num) return 1;
    return 0;
}
int main()
{
    int a, c;
    string b;
    int m = 0;
    map<string, int> ma;//记录每一名学生的总分
    while(~scanf("%d", &a)){
        cin >> b;
        scanf("%d", &c);
        if(c <= 12) c = 32;
        else if(c <= 24) c = 16;
        else if(c <= 48) c = 8;
        else if(c <= 96) c = 4;
        else if(c <= 192) c = 2;
        else c = 1;
        ma[b] += c;
    }
    for(map<string, int>::iterator it = ma.begin(); it != ma.end(); ++ it)
        maxn = (it -> second > maxn) ? it -> second : maxn;
    int k = 0;
    for(map<string, int>::iterator it = ma.begin(); it != ma.end(); ++ it){
        it -> second = comp(it -> second);
        s[k ++] = {it -> first, it -> second};
    }
    sort(s, s + k, cmp);
    for(int i = 0; i < k; ++ i) cout << s[i].num << " " << s[i].score << endl;
    return 0;
}

标签:map,1054,int,maxn,100,排序,86,93,homework
来源: https://blog.csdn.net/qq_45862064/article/details/115582789

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有