【PAT】B1085 PAT单位排行(25 分)(c++实现)
终于做的有点眉目了,今天学习了一点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++实现)的更多相关文章
- PAT Basic 1085 PAT单位排行 (25 分)
每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式: 输入第一行给出一个正整数 N(≤),即考生人数.随后 N 行,每行按下列格式给出一个考生的信息: 准 ...
- 1085. PAT单位排行 (25)
每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式: 输入第一行给出一个正整数N(<=105),即考生人数.随后N行,每行按下列格式给出一个考生的信 ...
- 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 ...
- [PAT] 1141 PAT Ranking of Institutions(25 分)
After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...
- 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 ...
- PAT 甲级 1016 Phone Bills (25 分) (结构体排序,模拟题,巧妙算时间,坑点太多,debug了好久)
1016 Phone Bills (25 分) A long-distance telephone company charges its customers by the following r ...
- PAT A1122 Hamiltonian Cycle (25 分)——图遍历
The "Hamilton cycle problem" is to find a simple cycle that contains every vertex in a gra ...
- PAT A1142 Maximal Clique (25 分)——图
A clique is a subset of vertices of an undirected graph such that every two distinct vertices in the ...
- PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化
After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...
- [PAT] 1142 Maximal Clique(25 分)
1142 Maximal Clique(25 分) A clique is a subset of vertices of an undirected graph such that every tw ...
随机推荐
- Orange——开源机器学习交互式数据分析工具
Orange为新手和专家提供开源机器学习和数据可视化.使用大型工具箱交互式数据分析工作流程. 交互式数据可视化 Orange的全部内容都是关于数据可视化,帮助发现隐藏的数据模式,提供数据分析过程背后的 ...
- Linux排序不准确的问题,用以下两行代码解决
export LC_ALL=C ...
- Java并发编程笔记之基础总结(一)
一.线程概念 说到线程就必须要提一下进程,因为线程是进程中的一个实体,线程本身是不会独立存在的.进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径,一 ...
- js仿qq分组折叠效果
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- php 获取中文字符串首字母
<?php $limit=array( //gb2312 拼音排序 array(45217,45252), //A array(45253,45760), //B array(45761,463 ...
- NFS部署教程
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可 ...
- springboot+cloud 学习(二)应用间通信Feign(伪RPC,实则HTTP)
在微服务中,使用什么协议来构建服务体系,一直是个热门话题. 争论的焦点集中在两个候选技术: RPC or Restful Restful架构是基于Http应用层协议的产物,RPC架构是基于TCP传输 ...
- FFmpeg内存IO模式(内存区作输入或输出)
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10318145.html 所谓内存IO,在FFmpeg中叫作"buffered ...
- 细说mysql replace into
replace语句在一般的情况下和insert差不多,但是如果表中存在primary 或者unique索引的时候,如果插入的数据和原来的primary key或者unique相同的时候,会删除原来的数 ...
- java-上转型对象&抽象类-学习记录
上转型对象: 如果B类是A类的子类(或间接子类),当用子类创建对象b并将这个对象的引用放到父类对象a中时,如: A a; a = new b() 或 A a;B b = new B();a = b; ...