链接:https://www.nowcoder.com/acm/contest/83/B
来源:牛客网

题目描述

第一次期中考终于结束啦!沃老师是个语文老师,他在评学生的作文成绩时,给每位学生的分数都是一个小于10的非负小数。

Amy 8.999999999999999999999999999999999999999990000

Bob 8.9999999999999999999999999999999999999999800

Cat 8.9999999999999999999999999999999999999999899999999

沃老师并不会告诉大家分数的排名,但学生间竞争激烈,大家都想知道自己的作文成绩在班上的排名。

但由于作文分数的小数部分可能超级长,难以用肉眼比较两个数的大小关系,请你帮忙写个程序,把所有学生按照作文分数排序吧〜

输入描述:

输入共有N + 1行。
第一行有一个正整数N,代表班上有几个人。
接下来N行中的第i行,包含一个字符串name

i

,以及一个小数score

i

,分别代表第i个人的名字以及第i个人的作文得分。

输出描述:

输出总共N行,每行由一个名字和一个小数构成,第i行代表着分数第i高的人的名字以及他的作文得分,代表作文得分的小数必须和输入一模一样,也就是原本末尾有多少零,输出也要有相同数量的零。
若分数相同,则名字字典序比较小的放在前面。
示例1

输入

3
Amy 8.999999999999999999999999999999999999999990000
Bob 8.9999999999999999999999999999999999999999800
Cat 8.9999999999999999999999999999999999999999899999999

输出

Amy 8.999999999999999999999999999999999999999990000
Cat 8.9999999999999999999999999999999999999999899999999
Bob 8.9999999999999999999999999999999999999999800
示例2

输入

6
Aa1 3.
Bb2 2.
Cc3 1.
a 5.
A 5.0
9 5.00

输出

9 5.00
A 5.0
a 5.
Aa1 3.
Bb2 2.
Cc3 1.

说明

请仔细观察这样例输入中的最后三行,虽然小数部分末尾0的数目不一样,但他们三个人都是同分的,所以必须按照名字字典序输出。
示例3

输入

10
peter50216 5.0216
kelvin 9.9999999990
seanwu 9.999999999
pp5438 5.438
csferng1021 1.021
tmt514 5.140
dreamoon 0.00000000
shik 9.999999999
l521530 5.21530
coquelicot 9.999999999000000000

输出

coquelicot 9.999999999000000000
kelvin 9.9999999990
seanwu 9.999999999
shik 9.999999999
pp5438 5.438
l521530 5.21530
tmt514 5.140
peter50216 5.0216
csferng1021 1.021
dreamoon 0.00000000

说明

此样例上出现的这些 id 是代表台湾大学参加 2010~2014 年五届 ICPC World Final 的选手唷!当中只有废物 dreamoon 没在 World Final 拿过金牌~

备注:

2≤N≤2×10

5

1≤字串名称的长度≤11
name

i

由数字及大小写英文字母组成
若i≠j,则name

i

≠name

j

所有名称的长度总和≤6×10

5

score

i

包含三个部分:整数部分,小数点,小数部分
  整数部分一定恰只有一个字元(数字'0'〜'9'之一)
  一定有小数点('.')
  小数部分由'0'〜'9'组成,长度可为0,也可以由字元'0'结尾
若把score

i

视为字符串,所有score

i

的长度总和≤6×10

5

 
 
题意 : 让你按要求排序,成绩相同时,按姓名的字典序排,成绩不同时,则按照成绩排,因为学生成绩输入长度时不确定的,因此要用C++的 string
思路分析 : 如果是自己的 cmp 函数,要加引用,否则会超时,原因是因为不使用引用就相当于把字符串复制了一遍。
代码示例 :

#define ll long long
const int maxn = 2e5+5;
const int mod = 1e9+7;
const double eps = 1e-9;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f; struct node
{
string name;
string score;
string ss;
//bool operator< (const node &v)const{
//if (ss == v.ss) return name < v.name;
//return ss > v.ss;
//}
}pre[maxn]; bool cmp(node &a, node &b){
if (a.ss == b.ss) return a.name < b.name;
return a.ss > b.ss;
} int main() {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
ios::sync_with_stdio(false);
int n; cin >>n;
for(int i = 1; i <= n; i++){
//scanf("%s%s", pre[i].name, pre[i].score);
cin >> pre[i].name >> pre[i].score;
int len = pre[i].score.size()-1;
while(pre[i].score[len] == '0') len--;
pre[i].ss = pre[i].score.substr(0, len+1);
}
sort(pre+1, pre+1+n, cmp);
for(int i = 1; i <= n; i++){
cout << pre[i].name << " " << pre[i].score << endl;
}
return 0;
}
 

C++ 排序引用的优化的更多相关文章

  1. CodeForces 558E(计数排序+线段树优化)

    题意:一个长度为n的字符串(只包含26个小字母)有q次操作 对于每次操作 给一个区间 和k k为1把该区间的字符不降序排序 k为0把该区间的字符不升序排序 求q次操作后所得字符串 思路: 该题数据规模 ...

  2. hdu1500 (排序+单调队列优化 )

    从n根筷子里面, 选择k+8个集合的筷子,每个集合三根筷子, A<=B<=C, 费用是(A-B)^2, 问最小的费用是多少. 将n根筷子排序之后,可以知道A和B的下标一定是连续的. 比如有 ...

  3. Codeforces 558E A Simple Task (计数排序&&线段树优化)

    题目链接:http://codeforces.com/contest/558/problem/E E. A Simple Task time limit per test5 seconds memor ...

  4. Mapreduce的排序(全局排序、分区加排序、Combiner优化)

    一.MR排序的分类 1.部分排序:MR会根据自己输出记录的KV对数据进行排序,保证输出到每一个文件内存都是经过排序的: 2.全局排序: 3.辅助排序:再第一次排序后经过分区再排序一次: 4.二次排序: ...

  5. Nowcoder Hash Function ( 拓扑排序 && 线段树优化建图 )

    题目链接 题意 : 给出一个哈希表.其避免冲突的方法是线性探测再散列.现在问你给出的哈希表是否合法.如果合法则输出所有元素插入的顺序.如果有多解则输出字典序最小的那一个.如果不合法则输出 -1 分析 ...

  6. 排序 | 冒泡排序的优化与qsort快速排序

    冒泡排序 冒泡排序 Bubble_Sort,是极为简单的一种排序算法.虽然效率差一点,但好在具有结构简单,容易理解,易于操作等优点.冒泡排序就是把小的元素往前调或者把大的元素往后调.在相邻的两个元素间 ...

  7. 计数排序 + 线段树优化 --- Codeforces 558E : A Simple Task

    E. A Simple Task Problem's Link: http://codeforces.com/problemset/problem/558/E Mean: 给定一个字符串,有q次操作, ...

  8. 前端优化分析 之 javascript引用位置优化

    在很多优化法则中都提到,尽量将javascript放到页面底部,这是为什么呢 我通过firebug进行了下简单的分析 看下图  本页面首尾都存在javascript代码 我们分析得出 1.整个页面文档 ...

  9. Codeforces 558E A Simple Task(计数排序+线段树优化)

    http://codeforces.com/problemset/problem/558/E Examples input 1 abacdabcda output 1 cbcaaaabdd input ...

随机推荐

  1. [转]爬虫 selenium + phantomjs / chrome

    目录 selenium 模块 安装 phantomjs 浏览器 安装 chromedriver 接口 安装 对比两个接口 整合使用 基本实例 常用属性方法 定位节点 节点操作 其他操作 实例解析 - ...

  2. notepad2正则表达式替换字符串

    例子: 1-385-463-3226替换成13854633226 Ctrl+H开启替换,选中'regular expression search'或者正则表达式: 上面输入:1-(.*)-(.*)-( ...

  3. Delphi的不足

    Delphi拥有C#那样的开发速度,同时运行速度也很快,而且不需要.net运行时(可以免安装直接运行).为什么还是衰落了呢? 既不是单根体系,又缺少泛型支持.导致delphi没法做map.list.v ...

  4. Jenkins 配置自动合并 release 分支到 master 分支

    本文告诉大家如何在 Jenkins 配置合并到 release 的内容自动合并到 gitlab 的 master 分支 首先需要两个仓库,一个是 gitlab 的仓库,另一个是 Jenkins 的仓库 ...

  5. slot的使用方法

    参考链接:https://www.cnblogs.com/loveyt/p/9946450.html 插槽的使用其实是很简单,你只需明白以下两点,就很容易理解. 1.插槽是使用在子组件中的, 2.插槽 ...

  6. import()函数

    简介 import命令会被 JavaScript 引擎静态分析,先于模块内的其他模块执行(叫做”连接“更合适).所以,下面的代码会报错. // 报错 if (x === 2) { import MyM ...

  7. dotnet 方法名 To 和 As 有什么不同

    在看到 dotnet 框架里面有很多方法里面用了 ToXx 和 AsXx 好像都是从某个类转换为另一个类,那么这两个方法命名有什么不同 在约定的方法命名里面,用 To 的方法表示从类 A 转为类 B ...

  8. vue中的computed和watch区别

    在vue.js官方文档中看到computed和watch获取全名的一个例子: var var vm = new Vue({ el: '#demo', data: { firstName: 'Foo', ...

  9. bash: : Too many levels of symbolic links

    ln -s 时 bash: : Too many levels of symbolic links改为绝对路径,

  10. Team Foundation Server 2015使用教程【8】:读取器tfs组的checkin权限修改