Description
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
Input
第1行是整数n(1<=n<=200000),表示自然数的个数。
第2~n+1行每行一个自然数。
第2~n+1行每行一个自然数。
Output
输出包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
Sample Input
8
2
4
2
4
5
100
2
100
Sample Output
2 3
4 2
5 1
100 2
思路
读入数据,然后排序,之后统计出现的次数。
#include<bits/stdc++.h> using namespace std; const int maxn = 200005; int a[maxn]; struct Node{ int val,cnt; }node[10005]; int main() { int N,p = 0; memset(node,0,sizeof(node)); scanf("%d",&N); for (int i = 0;i < N;i++) scanf("%d",&a[i]); sort(a,a+N); node[0].val = a[0]; for (int i = 1;i < N;i++) { if (a[i] == a[i-1]) node[p].val = a[i],node[p].cnt++; else node[++p].val = a[i]; } for (int i = 0;i <= p;i++) printf("%d %d ",node[i].val,node[i].cnt+1); return 0; }