链接: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;
}
 

最新文章

  1. 分享20款移动开发中很有用的 jQuery 插件
  2. iOS 让启动页面延迟的方法
  3. tcp 服务端如何判断客户端断开连接
  4. Mac和iOS开发资源汇总
  5. decode-string(挺麻烦的)
  6. 学习基于OpenGL的CAD程序的开发计划(一)
  7. 关于if (!cin)以及while (cin &gt;&gt; word)
  8. Java泛型中extends和super的理解(转)
  9. XP下类似%windir% %userprofile% 的变量的说明(转)
  10. python新手 实践操作 作业
  11. JVM面试
  12. 日历视图(CalendarView)组件的功能和用法
  13. X64系统下IIS运行ASP网站HTTP500错误 【安装FoxMail Server时出现】
  14. JS模式--通用对象池的实现
  15. 以kaggle-titanic数据为基础的完整的机器学习
  16. Selenium Extent Report的设置
  17. Calculate difference between consecutive data points in a column from a file
  18. display:inline-block与float
  19. Python socket应用
  20. Java jdbc链接 mySQL 写的crud

热门文章

  1. P1010 数值交换
  2. H3C 端口隔离基本配置
  3. dotnet core 发布只带必要的依赖文件
  4. vue-learning:4-template-v-if-and-v-show
  5. CF1151FSonya and Informatics
  6. dotnet Framework 源代码 类库的意思
  7. apply call 用法
  8. 25.python之面向对象
  9. Python上下文管理使用
  10. 第二阶段:4.商业需求文档MRD:1.PRD-产品功能列表