NC15610. 沃老师学生的成绩
描述
沃老师并不会告诉大家分数的排名,但学生间竞争激烈,大家都想知道自己的作文成绩在班上的排名。Amy 8.999999999999999999999999999999999999999990000
Bob 8.9999999999999999999999999999999999999999800
Cat 8.9999999999999999999999999999999999999999899999999
输入描述
输入共有N + 1行。
第一行有一个正整数N,代表班上有几个人。
接下来N行中的第i行,包含一个字符串namei,以及一个小数scorei,分别代表第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 拿过金牌~C++14(g++5.4) 解法, 执行用时: 646ms, 内存消耗: 99408K, 提交时间: 2019-12-02 18:07:28
#include<bits/stdc++.h> using namespace std; struct strc { string a,b,c; }str[1024000]; bool cmp(strc &x,strc &y) { if(x.c==y.c)return x.a<y.a; return x.c>y.c; } int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) { cin>>str[i].a>>str[i].b; str[i].c=str[i].b; int l=str[i].c.length(); while(str[i].c[l-1]=='0'){ str[i].c.erase(str[i].c.end()-1); l--; } } sort(str,str+n,cmp); for(int i=0;i<n;i++) cout<<str[i].a<<' '<<str[i].b<<endl; return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 1941ms, 内存消耗: 22756K, 提交时间: 2018-04-27 01:56:51
#include<iostream> #include<string> #include<algorithm> using namespace std; struct student{ string n,s,r; }p[200000]; bool QOO(student a,student b){ if(a.r==b.r) return a.n<b.n; return a.r>b.r; } int main(){ int n,i; cin>>n; for(i=0;i<n;i++){ cin>>p[i].n>>p[i].s; p[i].r=p[i].s.substr(0,p[i].s.find_last_not_of("0")+1); } sort(p,p+n,QOO); for(i=0;i<n;i++) cout<<p[i].n<<' '<<p[i].s<<'\n'; }
Python3 解法, 执行用时: 2669ms, 内存消耗: 82688K, 提交时间: 2023-04-27 21:34:15
from decimal import * n = int(input()) arr = [] for i in range(n): name, num = input().split() arr.append((name, num, Decimal('-'+num))) arr.sort(key=lambda x: (x[2], x[0])) for t in arr: print(t[0], t[1])
Python(2.7.3) 解法, 执行用时: 1374ms, 内存消耗: 83552K, 提交时间: 2018-04-13 22:09:11
a = [[x, y, y.strip('0')] for x, y in [raw_input().split() for _ in xrange(input())]] a.sort(key = lambda x: x[0]) a.sort(key = lambda x: x[2], reverse = True) print '\n'.join([' '.join(_[:-1]) for _ in a])