var
a:array[1..200000] of longint;
b,c:array[1..10000] of longint;
n,i,y:longint;
procedure sort(s,t:longint);
var
i,j,m,r,x:longint;
begin
randomize;
r:=random(s-t+1)+t;
m:=a[r];a[r]:=a[s];a[s]:=m;
i:=s;j:=t;x:=a[i];
repeat
while (i<j) and (a[j]>=x) do j:=j-1;
if i<j then begin a[i]:=a[j];i:=i+1;end;
while (i<j) and (a[i]<=x) do i:=i+1;
if i<j then begin a[j]:=a[i];j:=j-1;end;
until i=j;
a[i]:=x;
i:=i+1;
j:=j-1;
if i<t then sort(i,t);
if s<j then sort(s,j);
end;
begin
readln(n);
for i:=1 to n do read(a[i]);
sort(1,n);
b[1]:=a[1];
y:=1;
for i:=1 to 10000 do c[i]:=1;
for i:=2 to n do if a[i]<>a[i-1] then begin
y:=y+1;
b[y]:=a[i];
end else c[y]:=c[y]+1;
for i:=1 to y do begin write(b[i], ,c[i]);writeln;end;
end.
这是我的程序,请牛们帮我检查一下或者运行一下,谢谢!
var a:array[-1..max] of int64;
i,j,n:longint;
procedure qsort(l,r:int64);
var i,j,k,t:int64;
begin
i:=l;
j:=r;
k:=a[(i+j) div 2];
repeat
while a[i]<k do
inc(i);
while a[j]>k 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;
begin
readln(n);
for i:=1 to n do
readln(a[i]);
qsort(1,n);
for i:=1 to n do
begin
if a[i]<>a[i+1] then
begin
writeln(a[i], ,j+1);
j:=0;
end
else
inc(j);
end;
end.
事实上很简单的···
是快排的问题啦