争分
Time Limit:10000MS Memory Limit:65536K
Total Submit:35 Accepted:9
Description
期中考后,市教育局统计了全县各个学校的学生总成绩,然后将全部学校按总成绩排名。(假设每个学校学生人数都相同)
Input
(grade)
第一行一个数n(n <= 5000),其中n代表学校的个数。
接下来n个部分,每个部分有2行,第一行是一个字符串(长度不多于200位),代表这个学校的校名,第二行是一个数串,表示这个学校所有学生的成绩总和(长度不多于100位)。
Output
有n行,分别表示各个学校所有学生的成绩总和的排名顺序(按总成绩由高到低排列,若总成绩总和相同,则按校名的字典排序。)
chenguanzhongxue
987654321
shinianzhongxue
987513641
woxizhongxue
657891356
xinchangzhongxue
971456879
zhixinzhongxue
416789426
shinianzhongxue
xinchangzhongxue
woxizhongxue
zhixinzhongxue
Source
算法:模拟
很裸的一道模拟题了,就是纯的双关键字排序就可以,注意成绩的前面0的情况(感觉既然是成绩前面就不应该有0,这不符合规律啊……)
Time Limit:10000MS Memory Limit:65536K
Total Submit:35 Accepted:9
Description
期中考后,市教育局统计了全县各个学校的学生总成绩,然后将全部学校按总成绩排名。(假设每个学校学生人数都相同)
Input
(grade)
第一行一个数n(n <= 5000),其中n代表学校的个数。
接下来n个部分,每个部分有2行,第一行是一个字符串(长度不多于200位),代表这个学校的校名,第二行是一个数串,表示这个学校所有学生的成绩总和(长度不多于100位)。
Output
有n行,分别表示各个学校所有学生的成绩总和的排名顺序(按总成绩由高到低排列,若总成绩总和相同,则按校名的字典排序。)
Sample Input
chenguanzhongxue
987654321
shinianzhongxue
987513641
woxizhongxue
657891356
xinchangzhongxue
971456879
zhixinzhongxue
416789426
Sample Output
shinianzhongxue
xinchangzhongxue
woxizhongxue
zhixinzhongxue
Source
算法:模拟
很裸的一道模拟题了,就是纯的双关键字排序就可以,注意成绩的前面0的情况(感觉既然是成绩前面就不应该有0,这不符合规律啊……)
program grade;
const
maxn=5000;
type
atp=record
nam,sum:string;
end;
var
n:longint;
a:array [0..maxn] of atp;
procedure init;
var
i:longint;
begin
readln(n);
for i:=1 to n do
begin
readln(a[i].nam);
readln(a[i].sum);
while a[i].sum[1]='0' do delete(a[i].sum,1,1);
end;
end;
procedure qsort(l,r:longint);
var
i,j:longint;
m,t:atp;
begin
i:=l;
j:=r;
m:=a[(l+r) shr 1];
repeat
while ( length(a[i].sum)>length(m.sum) ) or ( (length(a[i].sum)=length(m.sum)) and (a[i].sum>m.sum) ) or ( (a[i].sum=m.sum) and (a[i].nam<m.nam) ) do inc(i);
while ( length(a[j].sum)<length(m.sum) ) or ( (length(a[j].sum)=length(m.sum)) and (a[j].sum<m.sum) ) or ( (a[j].sum=m.sum) and (a[j].nam>m.nam) ) do dec(j);
if i<=j then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
inc(i);
dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if l<j then qsort(l,j);
end;
procedure main;
var
i:longint;
begin
for i:=1 to n do writeln(a[i].nam);
end;
begin
assign(input,'grade.in'); reset(input);
assign(output,'grade.out'); rewrite(output);
init;
qsort(1,n);
main;
close(input); close(output);
end.