akoj-1187-统计数字

来源:互联网 发布:麦克风唱歌软件 编辑:程序博客网 时间:2024/05/16 07:37

统计数字

Time Limit:1000MS  Memory Limit:65536K
Total Submit:19 Accepted:14

Description

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

Input

输入包含n+1行:
第1行是整数n,表示自然数的个数。
第2~n+1行每行一个自然数。

Output

输出包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。

Sample Input

9232334254

Sample Output

2 33 34 25 1

Source

这题还是应该用map、容器来做比较好,但我理解的不多,所以还是用二维数组A掉了

#include <iostream>#include <cstdio>#include <map>#include <vector>#include <set>#include <algorithm>using namespace std;int main(){    long long t,n;bool b=true;    while(scanf("%lld",&t)!=EOF)    {if(!b) printf("\n");b=0;        map<long long,long long>m;        set<long long>s;        vector<long long>v;        while(t--)        {            scanf("%lld",&n);            if(s.count(n)==0)            {                s.insert(n);                v.push_back(n);                m[n]=1;            }            else m[n]++;        }        sort(v.begin(),v.end());        for(int i=0;i<v.size();i++)            printf("%lld %lld\n",v[i],m[v[i]]);    }    return 0;}
#include<iostream>#include<algorithm>using namespace std;int main(){    int n,a[10001]={0},b[10001]={0};    cin>>n;    for(int i=0; i<n; i++)    {        cin>>a[i];    }    sort(a,a+n);    for(int i=0;i<n;i++)    {        for(int j=0;j<n;j++)            if(a[j]==i)b[i]++;    }    for(int i=0;i<n;i++)    if(b[i]!=0)        cout<<i<<" "<<b[i]<<endl;    return 0;}

0 0