NOIP2007 统计数字
时间限制: 1 Sec 内存限制: 128 MB
题目描述
- 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
输入
- 第一行是整数n,表示自然数的个数;
第2~n+1每行一个自然数。
输出
- 包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
样例输入
- 8
2
4
2
4
5
100
2
100
样例输出
- 2 3
4 2
5 1
100 2
提示
- 40%的数据满足:1<=n<=1000
80%的数据满足:1<=n<=50000
100%的数据满足:1<=n<=200000,每个数均不超过1500 000 000(1.5*109)
var
w:array[1..200000]of longint;
i,j:longint;
a,n,sum,ci:longint;
procedure sort(l,r: longint);
var i,j,x,y,c: longint;
begin
i:=l; j:=r; x:=w[(l+r) div 2];
repeat
while w[i]<x do inc(i);
while x<w[j] do dec(j);
if not(i>j)
then
begin
c:=w[i]; w[i]:=w[j]; w[j]:=c;
inc(i); dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end;
begin
readln(n);
for i:=1 to n do
readln(w[i]);
sort(1,n);
ci:=1;
while ci<=n do
begin
sum:=0;
for j:=ci to n do
begin
if w[j]=w[ci]
then inc(sum)
else break;
end;
writeln(w[ci],' ',sum);
inc(ci,sum);
end;
end.