您的位置:首页 > 其它

[URAL 1100]Final Standings(排序技巧)

2009-08-29 18:08 260 查看
【题目描述】:

给你n(1<=n<=150000)组数,每组数有两个id和m(0<=m<=100),让你按照以m为关键字冒泡排序的顺序输出。

【题目分析】:

这个题的关键在于他要你按照冒泡排序的顺序输出。我们知道任意一个nlogn的排序算法都无法保证原数中的两个数相对位置不变。所以,就不能依靠快速排序等更快的排序算法来进行运算。

其实这个题的题眼在这:(0<=m<=100)

这让我们不得不想到桶排序。我们把这100种可能的情况记做一个个桶,然后我们来检验,进行桶排序。其实我们根本就可以按照降序来进行枚举m的值,然后将等于m的这组数输出出来,这样也就可以保证相对位置的不便。

这样反倒简单,代码仅14行。

复杂度O(100n)

【代码】:

program URAL_1100;
var
id:array[1..150000] of longint;
score:array[1..150000] of shortint;
i,k,n:longint;
begin
readln(n);
for i:=1 to n do
readln(id[i],score[i]);
for k:=100 downto 0 do
for i:=1 to n do
if score[i]=k then
writeln(id[i],' ',k);
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: