[模拟][NOIP2007] 统计数字

来源:互联网 发布:vocaloid软件 编辑:程序博客网 时间:2024/05/20 03:05

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.
0 0
原创粉丝点击