zoukankan      html  css  js  c++  java
  • 【9207&&b701】统计数字(NOIP2007)

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

    Input

    输入文件count.in包含n+1行; 第一行是整数n,表示自然数的个数; 第2~n+1每行一个自然数。

    Output

    输出文件count.out包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。 【限制】
    40%的数据满足:1<=n<=1000
    80%的数据满足:1<=n<=50000
    100%的数据满足:1<=n<=200000,每个数均不超过1500 000 000(1.5*109)

    Sample Input

    12
    9
    1400000000
    3
    89
    5645897
    6
    897456322
    8
    8
    1500000000
    90
    89
    
    

    Sample Output

    3 1
    6 1
    8 2
    9 1
    89 2
    90 1
    5645897 1
    897456322 1
    1400000000 1
    1500000000 1
    

    【题解】

    用快排排一遍,相同的数字会连续出现,输出时注意下就好。

    【代码】

    #include <cstdio>
    
    const int MAXN = 200000+10;
    
    int n,a[MAXN];
    
    void input_data() //输入数据 
    {
    	scanf("%d",&n);	
    	for (int i=1;i<=n;i++)
    		scanf("%d",&a[i]);
    }
    
    void q_sort(int l,int r) //快排 
    {
    	int m = a[(l+r)/2];
    	int i = l,j = r;
    	do
    	{
    		while (a[i] < m) i++;
    		while (m < a[j]) j--;
    		if (i <= j) 
    			{
    				int t = a[i];a[i]=a[j];a[j]=t;
    				i++;j--;	
    			}
    	} while (i<=j);
    	if (l < j) q_sort(l,j);
    	if (i < r) q_sort(i,r);
    }
    
    void get_put_ans() //输出答案 
    {
    	int i = 1;
    	while (i <= n)
    		{
    			int j = i+1;
    			while ( a[j] == a[i]) j++;
    			printf("%d %d
    ",a[i],j-i);
    			i = j;	
    		}
    }
    
    int main()
    {
    	input_data();
    	q_sort(1,n);
    	get_put_ans();
    	return 0;	
    }
    


     

  • 相关阅读:
    Debian双网卡配置
    Linux服务器双网卡双IP和单网卡双IP配置方法(Debian/Ubuntu)
    Debian系列网卡配置详解
    Debian下配置IPV6和静态路由
    Ubuntu Server系统修改IP地址
    Centos7新增静态路由
    Debian添加静态路由的正确姿势
    Linux 更改时区、时间
    Apache 2.4自签名证书及客户端SSL认证
    【计划】
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632508.html
Copyright © 2011-2022 走看看