zoukankan      html  css  js  c++  java
  • Vijos 1816统计数字(计数排序)

    传送门

    Description

    某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

    Input

    第1行是整数n(1<=n<=200000),表示自然数的个数。

    第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;
    }
    

      

     

  • 相关阅读:
    线程中测试getName方法和getId方法
    编写一个线程改变窗体的颜色
    创建两个线程分别输出1-100
    输出一个目录中的内容
    file占用字节
    MAP集合选出最大值
    使用增强for循环遍历集合
    数据框中的基本操作
    列表的基本操作
    因子的基本操作
  • 原文地址:https://www.cnblogs.com/ZhaoxiCheung/p/5939833.html
Copyright © 2011-2022 走看看