终于做的有点眉目了,今天学习了一点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. CSS 基础:HTML 标记与文档结构(1)<思维导图>

    这段时间利用一下间隙时间学习了CSS的基础知识,主要目的是加深对CSS的理解,虽然个人主要工作基本都是后台开发,但是个人觉得系统学习一下CSS的基础还是很有必要的.下面我学习CSS时做的思维导图(全屏 ...

  2. 海量日志实时收集系统架构设计与go语言实现

    日志收集系统应该说是到达一定规模的公司的标配了,一个能满足业务需求.运维成本低.稳定的日志收集系统对于运维的同学和日志使用方的同学都是非常nice的.然而这时理想中的日志收集系统,现实往往不是这样的. ...

  3. 获取访问者的IP地址

    function getIp() { $realip = NULL; if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ipArray = explode( ...

  4. JavaWeb学习 (十)————Cookie

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...

  5. javascript中 Function.prototype.apply()与Function.prototype.call() 对比详解

    Function.prototype.apply()|Function.prototype.call() apply()方法可以在使用一个指定的 this 值和一个参数数组(或类数组对象)的前提下调用 ...

  6. 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取

    公众号第三方平台开发 教程一 创建公众号第三方平台 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取 公众号第三方平台开发 教程三 微信公众号 ...

  7. 小白Python路上第一个难点,也是一个比较重要的点(闭包,迭代器,生成器)

    一.闭包 闭包就是在内层函数中引用外层函数的变量 作用:1.保护变量不受侵害          2.让一个变量永驻内存 二.迭代器 Iterator:迭代器,包含_iter_()和_next_()函数 ...

  8. Dynamics CRM 2016/365 窗体中添加按钮

    一.工具下载,及界面介绍 1.下载XrmToolBox工具(XrmToolBox for Microsoft Dynamics CRM/365 CE) 链接:https://www.xrmtoolbo ...

  9. Repeater 控件的嵌套使用

      Repeater 控件的嵌套使用   ItemDataBound:数据绑定的时候(正在进行时)发生,多用在Repeater控件嵌套,对子Repeater控件进行数据绑定及模板列中统计列的计算处理等 ...

  10. 详解promise、async和await的执行顺序

    1.题目和答案 一道题题目:下面这段promise.async和await代码,请问控制台打印的顺序? async function async1(){ console.log('async1 sta ...