题目链接

https://www.patest.cn/contests/pat-b-practise/1085

思路

结构体排序

要注意几个点

它的加权总分 是 取其整数部分

也就是 要 向下取整

然后这个操作要在排序操作之前

不能在输出的时候 进行

不然最后一个测试点 过不了

因为 假如

有两个学校的分数 分别是

195.1 195.2

如果排序按照这个排 就是 195.1 < 195.2

就会按照 总分来排

但实际上 向下取整之后 都是195 所以应该按照 考生人数 或者是单位码来排的

还有要注意的是 单位码 是小写

以及 排名的方式

AC代码

#include <cstdio>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <map>
#include <stack>
#include <set>
#include <numeric>
#include <sstream>
#include <iomanip>
#include <limits> #define CLR(a) memset(a, 0, sizeof(a))
#define pb push_back using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef pair<string, int> psi;
typedef pair<string, string> pss; const double PI = 3.14159265358979323846264338327;
const double E = exp(1);
const double eps = 1e-30; const int INF = 0x3f3f3f3f;
const int maxn = 1e5 + 5;
const int MOD = 1e9 + 7; struct Node
{
string name;
int tot;
double score;
int s;
}; bool comp(Node x, Node y)
{
if (x.s == y.s)
{
if (x.tot == y.tot)
return x.name < y.name;
else
return x.tot < y.tot;
}
return x.s > y.s;
} int main()
{
int n;
cin >> n;
map <string, Node> m;
string id, school;
int score;
for (int i = 0; i < n; i++)
{
cin >> id >> score >> school;
int len = school.size();
for (int j = 0; j < len; j++)
if (school[j] >= 'A' && school[j] <= 'Z')
school[j] += 32;
m[school].tot++;
m[school].name = school;
if (id[0] == 'A')
m[school].score += score;
else if (id[0] == 'B')
m[school].score += score * 1.0 / 1.5;
else
m[school].score += score * 1.5;
}
map <string, Node>::iterator it;
vector <Node> ans;
for (it = m.begin(); it != m.end(); it++)
{
it->second.s = floor(it->second.score);
ans.pb(it->second);
}
sort(ans.begin(), ans.end(), comp);
int len = ans.size();
cout << len << endl;
printf("1 ");
cout << ans[0].name;
printf(" %d %d\n", ans[0].s, ans[0].tot);
int rank = 1;
for (int i = 1; i < len; i++)
{
if (ans[i].s != ans[i - 1].s)
rank = i + 1;
printf("%d ", rank);
cout << ans[i].name;
printf(" %d %d\n", ans[i].s, ans[i].tot);
}
}

PAT 乙级 1085. PAT单位排行 (25) 【结构体排序】的更多相关文章

  1. PAT A 1022. Digital Library (30)【结构体排序检索】

    https://www.patest.cn/contests/pat-a-practise/1022 直接模拟, 输入,按id排序,检索 #include <iostream> #incl ...

  2. PAT(B) 1085 PAT单位排行(Java:20分)

    题目链接:1085 PAT单位排行 (25 point(s)) 题目描述 每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式 输入第一行给出一个正整数 N ...

  3. PAT乙级:1090危险品装箱(25分)

    PAT乙级:1090危险品装箱(25分) 题干 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清 ...

  4. PAT乙级:1070 结绳 (25分)

    PAT乙级:1070 结绳 (25分) 题干 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟 ...

  5. PAT 甲级 1080 Graduate Admission (30 分) (简单,结构体排序模拟)

    1080 Graduate Admission (30 分)   It is said that in 2011, there are about 100 graduate schools ready ...

  6. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. 第m大的身份证号码(局部排序代全局、结构体排序)

    第m大的身份证号码(点击) 时间限制: 1 Sec  内存限制: 128 MB                                                             ...

  8. 转载 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    转载自:http://www.cnblogs.com/cj695/p/3863142.html sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在 ...

  9. 【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...

随机推荐

  1. [field:description /]标签如何限制字数?|DedeCms

    [field:description /]标签如何限制字数? [field:description function='cn_substr(@me,80)'/]dede 里的所有标记都支持这样使用函数 ...

  2. MFC中 编辑框输入换行功能

    首先修改编辑框的属性: Multiline 设为true , Auto HScroll 设为true , Auto VScroll 设为 true . 然后响应PreTranslateMessage( ...

  3. ArcGIS教程:公布地理处理服务

    要公布地理处理服务.您须要两个元素:结果 窗体中的结果和到 ArcGIS Server 的管理员或公布者连接. 要公布服务,请右键单击结果并选择共享为 > 地理处理服务.例如以下图所看到的.此操 ...

  4. 慕课网python进阶函数式编程学习记录

    函数 不等于 函数式 函数: function 函数式: functional,一种编程范式 就好比计算机 不等于 计算 c语言: 函数 python :函数式(计算) 函数式编程特点: 把计算视为函 ...

  5. 【前端阅读】——《编程之魂》摘记&读后感&思维导图

    前言:这本书全名叫<编程之魂——与27为编程语言创始人对话>,它的内容以采访对话为主,以图通过和顶级大师的真实交流来调查:大师们为什么要创建某种编程语言,它的技术如何开发.如何教授和学习, ...

  6. [转]MySQL的简单使用和JDBC示例

    MySql简单操作 //启动mysql net start mysql //登陆 mysql -u root -p //创建建数据库 create database mydb; create data ...

  7. 转: IO设计模式:Reactor和Proactor对比

    转: https://segmentfault.com/a/1190000002715832 平时接触的开源产品如Redis.ACE,事件模型都使用的Reactor模式:而同样做事件处理的Proact ...

  8. 第十二题 Merge Sorted Array

    Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may assume th ...

  9. SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析

    落雨 cas 单点登录 一.用户第一次访问web1应用. ps:上图少画了一条线,那一条线,应该再返回来一条,然后再到server端,画少了一步...谢谢提醒.而且,重定向肯定是从浏览器过去的.我写的 ...

  10. Javascript模式(二) 发布者/订阅者模式

    var publisher = { // 订阅者数组 subscribers : { "any" : [] }, // 增加订阅者 on : function(type, fn, ...