终于做的有点眉目了,今天学习了一点stl的皮毛,解题瞬间变容易了

下边开始分析本题

这道题如果用纯c解决实在太麻烦,试了半天两个超时,果断放弃,还是用map方便;

我的方法与柳神的方法是有区别的,我只是用map来保存学校在结构体数组中的地址。

代码中每一块都有注释,绝对不是耍流氓的直接贴一片代码,

注意:

最后学校的成绩要求取整,为了省去遍历一遍学校结构体数组,所有用到了float性分数的地方都强转了int


#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
struct sch{
string name;
float score=0;
int stu=0;
}arr[100005];//这个数组可以小点,学校怎么可能这么多
bool cmp(sch A,sch B){
if((int)A.score!=(int)B.score) return (int)A.score>(int)B.score;//分数不同,谁大谁在前
else if(A.stu!=B.stu) return A.stu<B.stu; //分数相同,学生数不同,学生数小的在前
else return A.name<B.name; //否则只能用字典序了,谁小谁的字典序在前
}
int main(){
int N;scanf("%d",&N); //学生数的定义和输入
int num=0;//学校数
map<string,int> mp; //mp用来存放学校名字符串到结构体数组的映射
for(int i=0;i<N;i++){
string id,school;float score;
cin>>id;scanf("%f",&score);cin>>school;
for(int j=0;j<school.length();j++){ //名字变小写
school[j]=tolower(school[j]);
}
if(id[0]=='B') score/=1.5; //计算当前学生可以给学校带来多少分
if(id[0]=='T') score*=1.5;
if(mp.count(school)==0){ //如果此学校第一次出现
mp[school]=num++;
arr[num-1].name=school;
}
arr[mp[school]].score+=score; //给这个学校加上这个学生的分
arr[mp[school]].stu++; //学校的学生数加加
}
sort(arr,arr+num,cmp); //对结构体数组进行排序
int mingci=1;
printf("%d\n1 ",num); //先输出了学校数和第一名的学校
cout<<arr[0].name;
printf(" %d %d",(int)arr[0].score,arr[0].stu);
for(int i=1;i<num;i++){ //从第二个学校开始的
if((int)arr[i].score!=(int)arr[i-1].score) //如果分数和前一个学校相同,当然mingci就行同了
mingci=i+1; //如果分数不同,那么名次正好等于i+1
printf("\n%d ",mingci); //输出当前学校的信息
cout<<arr[i].name;
printf(" %d %d",(int)arr[i].score,arr[i].stu);
}
return 0;
}

【PAT】B1085 PAT单位排行(25 分)(c++实现)的更多相关文章

  1. PAT Basic 1085 PAT单位排行 (25 分)

    每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式: 输入第一行给出一个正整数 N(≤),即考生人数.随后 N 行,每行按下列格式给出一个考生的信息: 准 ...

  2. 1085. PAT单位排行 (25)

    每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式: 输入第一行给出一个正整数N(<=105),即考生人数.随后N行,每行按下列格式给出一个考生的信 ...

  3. PAT 1009 Product of Polynomials (25分) 指数做数组下标,系数做值

    题目 This time, you are supposed to find A×B where A and B are two polynomials. Input Specification: E ...

  4. [PAT] 1141 PAT Ranking of Institutions(25 分)

    After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...

  5. PAT 甲级 1063 Set Similarity (25 分) (新学,set的使用,printf 输出%,要%%)

    1063 Set Similarity (25 分)   Given two sets of integers, the similarity of the sets is defined to be ...

  6. PAT 甲级 1016 Phone Bills (25 分) (结构体排序,模拟题,巧妙算时间,坑点太多,debug了好久)

    1016 Phone Bills (25 分)   A long-distance telephone company charges its customers by the following r ...

  7. PAT A1122 Hamiltonian Cycle (25 分)——图遍历

    The "Hamilton cycle problem" is to find a simple cycle that contains every vertex in a gra ...

  8. PAT A1142 Maximal Clique (25 分)——图

    A clique is a subset of vertices of an undirected graph such that every two distinct vertices in the ...

  9. PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化

    After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...

  10. [PAT] 1142 Maximal Clique(25 分)

    1142 Maximal Clique(25 分) A clique is a subset of vertices of an undirected graph such that every tw ...

随机推荐

  1. Maven项目打包成可执行Jar文件

    在使用Maven完成项目以后,如果需要打包成可执行的Jar文件,我们通过eclipse的导出很麻烦,还得指定入口文件的位置,还得说明依赖的jar包,既然都使用Maven了,很重要的一个目的就是让这些繁 ...

  2. postman自定义函数实现 时间函数

    一:主要内容 postman环境变量方式封装格式化日期函数:yyyy-MM-dd HH:mm:ss postman利用moment模块实现格式化日期函数:yyyy-MM-dd HH:mm:ss 二:p ...

  3. 进程间通信IPC-管道

    管道是UNIX系统IPC的最古老的形式,所有的UNIX系统都提供此通讯机制.管道有以下两种局限性: 1, 历史上,它们是半双工的(即数据只能在一个方向上流动).现在某些系统提供了全双工管道,但是为了最 ...

  4. python 浅析格式化输出和深浅copy

    一,格式化输出 今天主要想记录一下关于格式化输出的例子,然后结合了自己的理解,分析如下: 格式是 :百分号+占位符 主要有三种使用形式:%s  (其中s表示string)表示字符串 %d  (其中d表 ...

  5. Java基础系列--final、finally关键字

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8482909.html 一.概述 final是Java关键字中最常见之一,表示“最终的,不可 ...

  6. memcached优化方案实例

    <?php //引入memcached require_once '../class/memcached.class.php'; //连接MySQL $link = mysqli_connect ...

  7. Mybatis之逆向工程

    前面几篇基本把mybatis简单使用学习了下,今天学习下mybatis逆向工程,我们在开发中经常需要先设计数据库表结构或者先设计model,那就是能不能有工具可以只需在一边设计之后另一边自动生成呢?于 ...

  8. 多继承之MRO

    一,python2和python3的区别 在python2中存在两种类:一个叫经典类,在python2.2之前,一直用的是经典类,经典类如果在基类的根什么都不写,那么它就是根:还有一个叫新式类,在py ...

  9. C++异常的几种捕获方式

    捕获指定的类型 这样的话可以对每种异常做出不同的处理,例如: #include <iostream> using namespace std; void A(int n){ int a = ...

  10. MyBatis——MyEclipse中使用mybatis-generator

    mybatis-generator可以根据数据库的表来生成POJO类.mapper.xml和DAO接口,用这个插件会大大地提高开发的效率.网上虽然有一些使用这个插件的教程,但我单个试了并不能成功,会出 ...