天才特工 - 2013-3-9 20:51:00
如题所示,会C的朋友帮帮忙啊。进来先吭一声嘛:kaka12: :kaka16:
问题如下:
【题目描述】
某次科研调查时得到了n个自然数,每个数均不超过1500000000 (1.5*109)。己知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
【输入】
包含n+l行:
第1行的整数是n,表示自然数的个数,第2~n+l行每行一个自然数。
【输出】
包含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,每个数据不超过1500000000 (1.5*109)
要使用C/C++,排序算法要自己写……
鬼鬼小猫咪 - 2013-3-9 21:09:00
不会,帮顶了.
鬼鬼小猫咪 - 2013-3-9 21:16:00
天才特工 - 2013-3-9 21:20:00
谢谢了,准高三冲高档大学,平时关在学校,没空了。现在也在信息学考试!实在抱歉:kaka3:
鬼鬼小猫咪 - 2013-3-9 21:33:00
不差钱.........:kaka11:
非礼莫理 - 2013-3-10 16:10:00
好难
咱只会简单的
有没有简单的:kaka8:
没有就算了
鬼鬼小猫咪 - 2013-3-10 17:44:00
百度了一个,啥语言不知道.
var
a:array[1..200001] of longint;
n,i,j,s:longint;
procedure sort(l,r: longint);
var
i,j,x,y: longint;
begin
i:=l;
j:=r;
x:=a[(l+r) div 2];
repeat
while a<x do
inc(i);
while x<a[j] do
dec(j);
if not(i>j) then
begin
y:=a;
a:=a[j];
a[j]:=y;
inc(i);
j:=j-1;
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
read(a);
sort(1,n);
s:=0;
for i:=1 to n do
if a<>a[i+1] then inc(s);
writeln(s);
i:=1;
a[n+1]:=-1;
repeat
s:=1;
while a=a[i+1] do
begin
inc(i);
inc(s);
end;
writeln(a,' ',s);
inc(i);
until i>n;
end.
指染紅顏淚 - 2013-3-10 18:08:00
我也不会,顶起来等高手来吧
天才特工 - 2013-3-10 20:14:00
你那个是PASCAL语言的,要考虑算法的空间复杂度和时间复杂度,不是做出来就完事的:kaka6:
© 2000 - 2026 Rising Corp. Ltd.