题一 水王争霸1549
问题描述:
你作为裁判得到了每个水王的发贴数,你的任务是把这些水王按照发贴数从大到小进行排序。
输入格式:
输入的第一行是一个1到1000的整数N,表示总共有N位水王参加了争霸赛。
一位水王的描述占据两行,第一行为长度不超过20的字符串,代表ID,第二行一个高精度的整数(非负数),代表发贴数。首位没有0。
所有水王发贴数的总长度(注意,是总长度而不是总和)不会超过10000。
输入中不会出现空格等字符。
输出格式:
按照发贴数从大到小排好水王的ID,每个ID占据一行。若几个ID的发贴数相同,则按照ID的字典顺序先后排列。
样例:
WATER.IN | WATER.OUT |
6 lowai 1534534124561243453 zhouyuan 23453265344 Maolaoda 23442353452342 BuTaoCaiGuai 7568784573464 ArthurKing 97534892734723947 hyyylr 623893451
| lowai ArthurKing Maolaoda BuTaoCaiGuai zhouyuan hyyylr
|
思路:
特判排序,简单排一下就好
var
id,a:array[0..1001]of ansistring;
v:array[0..1001]of longint;
c:ansistring;
i,j,n,s,t:longint;
begin
readln(n);
for i:=1 to n do
begin
readln(id[i]);
readln(a[i]);
v[i]:=length(a[i]);
end;
for i:=1 to n do
for j:=i+1 to n do
begin
if v[i]<v[j] then
begin
t:=v[i]; v[i]:=v[j]; v[j]:=t;
c:=a[i]; a[i]:=a[j]; a[j]:=c;
c:=id[i]; id[i]:=id[j]; id[j]:=c;
enD
else if (v[i]=v[j])and(a[i]<a[j]) then
begin
t:=v[i]; v[i]:=v[j]; v[j]:=t;
c:=a[i]; a[i]:=a[j]; a[j]:=c;
c:=id[i]; id[i]:=id[j]; id[j]:=c;
enD
else if (v[i]=v[j])and(a[i]=a[j])and(id[i]>id[j])then
begin
t:=v[i]; v[i]:=v[j]; v[j]:=t;
c:=a[i]; a[i]:=a[j]; a[j]:=c;
c:=id[i]; id[i]:=id[j]; id[j]:=c;
enD
end;
for i:=1 to n do
writeln(id[i]);
end.