1063 2007年分区联赛提高组之一 统计数字
2017-03-02 17:01
141 查看
题目
题解
代码
题解
代码
题目
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
题解
用Hash表储存数据,把数组多开一个维度,用来储存出现了几次,出现重复就加1。把每种数都放到另一个数组里,把这个数组从小到大排序。最后输出。代码
const max=10000007; var n,i,k,m:longint; h:array[0..max,1..2]of longint; a:array[1..10000]of longint; function locate(k,s:longint):longint; var i:longint; begin i:=k mod max; while (h[i,1]<>0)and(h[i,1]<>k) do i:=(i+1) mod max; if s=1 then begin h[i,1]:=k;inc(h[i,2]); if h[i,2]=1 then begin inc(m);a[m]:=k;end; end else exit(i); end; procedure qsort(l,r:longint); var i,j,key,t:longint; begin if l>=r then exit; i:=l;j:=r; key:=a[l+random(r-l+1)]; repeat while (a[i]<key)and(i<r) do inc(i); while (a[j]>key)and(j>l) 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; qsort(i,r); qsort(l,j); end; begin readln(n); randomize; for i:=1 to n do begin readln(k); locate(k,1); end; qsort(1,m); for i:=1 to m do begin k:=locate(a[i],2); writeln(h[k,1],' ',h[k,2]); end; end.
相关文章推荐
- 2007年分区联赛提高组之一 统计数字(SSL 1063)
- (ssl1063)P1097 2007年分区联赛提高组之一 统计数字
- 2007年分区联赛提高组之一 统计数字
- 2007年分区联赛提高组之一 统计数字
- 2007年分区联赛提高组之一 统计数字
- 2007年分区联赛提高组之一 统计数字
- 2007年分区联赛提高组之一 统计数字
- 2007年NOIP提高组 统计数字
- 全国信息学奥林匹克联赛(NOIP2010)复赛 1.数字统计 解题报告
- 2004年分区联赛提高组之一&nbsp;津津的…
- 2006年分区联赛提高组之二&nbsp;金明的…
- 2003年分区联赛普级组之二 数字游戏_dp
- 1126 数字统计 2010年NOIP全国联赛普及组
- 2004年分区联赛提高组之三 合唱队形(dp)
- 2004年分区联赛提高组之二&nbsp;合…
- 2006年分区联赛提高组之二&nbsp;金明的…
- 树网的核 2007年NOIP全国联赛提高组(floyed)
- 1996年分区联赛提高组之四&nbsp;砝码称…
- NOIP2016全国信息学分区联赛提高组第二试 蚯蚓 ssl 2599 队列
- 数字统计(2010年NOIP全国联赛普及组)