终于做的有点眉目了,今天学习了一点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. Orange——开源机器学习交互式数据分析工具

    Orange为新手和专家提供开源机器学习和数据可视化.使用大型工具箱交互式数据分析工作流程. 交互式数据可视化 Orange的全部内容都是关于数据可视化,帮助发现隐藏的数据模式,提供数据分析过程背后的 ...

  2. Linux排序不准确的问题,用以下两行代码解决

    export LC_ALL=C                                                                                      ...

  3. Java并发编程笔记之基础总结(一)

    一.线程概念 说到线程就必须要提一下进程,因为线程是进程中的一个实体,线程本身是不会独立存在的.进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径,一 ...

  4. js仿qq分组折叠效果

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  5. php 获取中文字符串首字母

    <?php $limit=array( //gb2312 拼音排序 array(45217,45252), //A array(45253,45760), //B array(45761,463 ...

  6. NFS部署教程

    NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可 ...

  7. springboot+cloud 学习(二)应用间通信Feign(伪RPC,实则HTTP)

    在微服务中,使用什么协议来构建服务体系,一直是个热门话题. 争论的焦点集中在两个候选技术:  RPC or Restful Restful架构是基于Http应用层协议的产物,RPC架构是基于TCP传输 ...

  8. FFmpeg内存IO模式(内存区作输入或输出)

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10318145.html 所谓内存IO,在FFmpeg中叫作"buffered ...

  9. 细说mysql replace into

    replace语句在一般的情况下和insert差不多,但是如果表中存在primary 或者unique索引的时候,如果插入的数据和原来的primary key或者unique相同的时候,会删除原来的数 ...

  10. java-上转型对象&抽象类-学习记录

    上转型对象: 如果B类是A类的子类(或间接子类),当用子类创建对象b并将这个对象的引用放到父类对象a中时,如: A a; a = new b() 或 A a;B b = new B();a = b; ...