AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

AcWing 490. 统计数字    原题链接    简单

作者: 作者的头像   Mr_IceDragonFla ,  2019-10-20 22:02:11 ,  所有人可见 ,  阅读 739


1


1

题目描述

次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5×109)。

已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

输入格式
输入共n+1行。

第1行是整数n,表示自然数的个数;

第2至n+1每行一个自然数。

输出格式
输出包含 m 行(m 为 n 个自然数中不相同数的个数),按照自然数从小到大的顺序输出。

每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。

数据范围
1≤n≤200000

样例

输入样例:

8
2
4
2
4
5
100
2
100

输出样例:

2 3
4 2
5 1
100 2

看到这道题目的时候。
我的第一反应是——桶排!
但是看到15后面那么多0的时候,才发现原来桶排会炸掉,
所以就想到了排序的做法,大家可以具体看代码里面的注释,会好一些。


C++ 代码

#include<bits/stdc++.h>
long long num[200010];
using namespace std;
int main() {
    int n;
    cin>>n;
    for(int i=0;i<n;i++)cin>>num[i];//数据读入
    sort(num,num+n);//排序(从小到大)
    long long front,ans=1;//front记录当前的数字,ans记录当前数字的个数。ans务必是1;
    for(int i=0;i<n;i++){
        front=num[i];//记录当前最小的一个数字
        if(num[i]==num[i+1])ans++;//当后一个和当前的一个数字是同一个的时候,ans++;
        else{
            cout<<front<<' '<<ans<<endl;
            ans=1;//设置1是为了避免上面的判断语句的错误
        }
    }
        return 0;//完美结束!
}

1 评论


用户头像
小菜鸡UP   2020-03-07 17:44         踩      回复

巧-,-我特意写了个桶发现炸了。还想着哈希啥的-,-看来是我想多了


App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息