• PAT A1141 PAT Ranking of Institutions [排序+硬核模拟]


    题目描述

    链接
    给出每个学生的id、分数、学校,学校名称不区分大小写,输出学校排名、学校名称、总加权成绩、学校参赛人数。学校名称输出时候以小写方式输出

    分析

    • 用s1,s2,score,sum,cnt这些来临时统计,然后用map对每个学校进行存储
    • 大小写转换:直接对单个字符使用tolower(),对于是小写的,它默认不转换
    • 注意!!!!是对最后的sum取整!!!不是中间!!否则会出错!三分的点
    • 排名的处理!!!!
    int rank = 0, pres = -1;
    for (int i = 0; i < ans.size(); i++) {
        if (pres != ans[i].tws) rank = i + 1;
        pres = ans[i].tws;
    }
    

    代码

    #include<bits/stdc++.h>
    using namespace std;
    
    struct node{
        string s;
        int cnt;
        int sum;
    };
    
    unordered_map<string, pair<int,double> > mp;
    bool cmp(node &x, node &y){
        if(x.sum == y.sum && x.cnt == y.cnt) return x.s < y.s;
        else if(x.sum == y.sum) return x.cnt < y.cnt;
        else return x.sum > y.sum;
    }
    
    int n;
    
    int main(){
        scanf("%d", &n);
        for(int i=0;i<n;i++){
            string s1,s2;
            int score;
            double sum;
            cin>>s1>>score>>s2;
            for(int j=0;j<s2.length();j++){
                if(isupper(s2[j])) s2[j] = s2[j]-'A'+'a';
            }
            if(s1[0] == 'T') sum = 3 * score / 2.0;
            else if(s1[0] == 'A') sum = score;
            else if(s1[0] == 'B') sum = score * 2 / 3.0;
            if(mp.find(s2) == mp.end()) mp[s2] = make_pair(0,0.0);
            mp[s2].first++; mp[s2].second += sum;
        }
        vector<node> ans;
        for(auto it=mp.begin(); it != mp.end(); it++){
            ans.push_back(node{it->first, (it->second).first, (int)(it->second).second}); //注意!!!
        }
        sort(ans.begin(), ans.end(), cmp);
        printf("%d
    ", ans.size());
        int rank = 1;
        int cnt = 0;
        for(int i=0;i<ans.size();i++){
            if(i!= 0){
                if(ans[i].sum != ans[i-1].sum){
                    rank += cnt;
                    cnt = 0;
                }
            }
            printf("%d %s %d %d
    ", rank, ans[i].s.c_str(), ans[i].sum, ans[i].cnt);
            cnt++;
        }
    }
    
    
  • 相关阅读:
    django-based blog- mezzanine
    echo "hello" | nc -4t -w1 localhost 8001
    boost静态链接的问题 -lgcc_s
    Vim 新用法
    解决docker中DNS查询的问题
    centos 升级GCC/G++
    enable c++11 in autoconf in fucking gnu auto tools
    Fucking "pkg-config not found"
    在CentOS 6.X 上面安装 Python 2.7.X
    redis sentinel 配置
  • 原文地址:https://www.cnblogs.com/doragd/p/11461061.html
Copyright © 2020-2023  润新知