题目链接:点击打开链接
链接:https://www.nowcoder.com/acm/contest/83/B
来源:牛客网
时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
第一次期中考终于结束啦!沃老师是个语文老师,他在评学生的作文成绩时,给每位学生的分数都是一个小于10的非负小数。
沃老师并不会告诉大家分数的排名,但学生间竞争激烈,大家都想知道自己的作文成绩在班上的排名。Amy 8.999999999999999999999999999999999999999990000
Bob 8.9999999999999999999999999999999999999999800
Cat 8.9999999999999999999999999999999999999999899999999
但由于作文分数的小数部分可能超级长,难以用肉眼比较两个数的大小关系,请你帮忙写个程序,把所有学生按照作文分数排序吧〜
输入描述:
输入共有N + 1行。 第一行有一个正整数N,代表班上有几个人。 接下来N行中的第i行,包含一个字符串namei,以及一个小数scorei,分别代表第i个人的名字以及第i个人的作文得分。
输出描述:
输出总共N行,每行由一个名字和一个小数构成,第i行代表着分数第i高的人的名字以及他的作文得分,代表作文得分的小数必须和输入一模一样,也就是原本末尾有多少零,输出也要有相同数量的零。 若分数相同,则名字字典序比较小的放在前面。
需要特别考虑的就是:同名又同分时,此时输出保持原来的循序,这就体现出了用stable_sort(num,num+n,cmp)的好处,用sort(num,num+n,cmp)总是通不过,这就是水平有限。带有stable的函数可保证想等元素的原本相对次序在排序后保持不变。或许你会问,既然想等,你还管他相对位置呐,也分不清楚谁是谁了?这里需要能清楚一个问题,这里的相等是指你提供的函数表示两个元素相等,并不一定是一摸一样的函数。
#include <iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
struct node{
string name;
string score;
string rscore;
}num[200005];
bool cmp(node a,node b)
{
if(a.rscore==b.rscore)
{
return a.name<b.name;
}
else
{
return a.rscore>b.rscore;
}
}
int main()
{
int n;
scanf("%d",&n);
{
for(int i=0;i<n;i++)
{
cin>>num[i].name>>num[i].score;
int r=num[i].score.length()-1;
for(int j=r;j>=0;j--)
{
if(num[i].score[j]=='0')
{
r--;
}
else
{
break;
}
}
num[i].rscore=num[i].score.substr(0,r+1);
}
stable_sort(num,num+n,cmp);
for(int i=0;i<n;i++)
{
cout<<num[i].name<<' '<<num[i].score<<endl;
}
}
return 0;
}
/*
链接:https://www.nowcoder.com/acm/contest/83/B
来源:牛客网
链接:https://www.nowcoder.com/acm/contest/83/B
来源:牛客网
3
Amy 8.999999999999999999999999999999999999999990000
Bob 8.9999999999999999999999999999999999999999800
Cat 8.9999999999999999999999999999999999999999899999999
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
6
Aa1 3.
Bb2 2.
Cc3 1.
a 5.
A 5.0
9 5.00*/