PAT_甲级_1141 PAT Ranking of Institutions

题目大意:

给定N个学生的ID,成绩和所属学校,现要求按照每一个学校参与的学生信息获取学校的排名并输出。

算法思路:

我们使用Institution保存需要输出的学院的每一个信息,在输入的时候使用map institution容器来保存每一个学校的相关信息,然后再将信息搜集完毕所有学校添加进vector result容器中以方便排序从而获取排名,最后再输出即可。

获取排名的方法:
// 获取排名
int ra = 1;// 初始排名 
for(int i=0;i

注意点:

  • 1、输出的所有学校都是小写字母组成的,输入的时候得进行处理。
  • 2、学校的加权平均分是直接截断浮点数得到的,不是四舍五入。
  • 3、排序的时候,依据的是截断后的加权平均分进行的比较。

提交结果:

PAT_甲级_1141 PAT Ranking of Institutions_第1张图片

AC代码:

#include
#include
#include
#include
#include

using namespace std;

struct Institution{
    int rank;
    string school;
    double TWS;
    int tws;
    int Ns;
};

unordered_map institution;
vector result;

bool cmp(const Institution &a,const Institution &b){
    return a.tws!=b.tws?a.tws>b.tws:a.Ns!=b.Ns?a.Ns='A'&&s[i]<='Z'){
            r += (s[i]+32);
        }else{
            r += s[i];
        }
    }
    return r;
}

int main(){
    int N;
    scanf("%d",&N);
    string id,school;
    int score;
    for(int i=0;i>id>>score>>school;
        // 将学校名字转化为小写字符串 
        string r = toLowerCase(school);
        institution[r].school = r;
        if(id[0]=='B'){
            institution[r].TWS += score/1.5;
        }else if(id[0]=='A'){
            institution[r].TWS += score;
        }else{
            institution[r].TWS += score*1.5;
        }
        ++institution[r].Ns;
    }
    unordered_map::iterator it;
    // 将所有学校添加进 result中方便排序 
    for(it=institution.begin();it!=institution.end();++it){
        it->second.tws = (int)it->second.TWS;
        result.push_back(it->second);
    }
    sort(result.begin(),result.end(),cmp);
    // 获取排名
    int ra = 1;// 初始排名 
    for(int i=0;i

你可能感兴趣的:(算法-数据结构,c++)