洛谷-P1097 [NOIP2007 提高组] 统计数字

洛谷-P1097 [NOIP2007 提高组] 统计数字

原题链接:https://www.luogu.com.cn/problem/P1097


题目背景

#警告:数据可能存在加强

题目描述

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

输入格式

\(n+1\)行。

第一行是整数\(n\),表示自然数的个数;

\(2\)\(n+1\)每行一个自然数。

输出格式

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

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

输入输出样例

输入 #1

8
2
4
2
4
5
100
2
100

输出 #1

2 3
4 2
5 1
100 2

说明/提示

\(40\%\)的数据满足:\(1 \le n \le 1000\)

\(80\%\)的数据满足:\(1 \le n \le 50000\)

\(100\%\)的数据满足:\(1 \le n \le 200000\),每个数均不超过\(1500 000 000(1.5 \times 109)\)

NOIP 2007 提高第一题

C++代码

#include <cstdio>
#include <algorithm>
using namespace std;

long long a[200005], b[10005][2], t;

int main() {
    int n, k = 0;
    scanf("%d", &n);
    for (int i=0; i<n; ++i)
        scanf("%lld", &a[i]);
    sort(a, a+n);
    for (int i=0; i<n; ++i)
        if (a[i] != a[i+1]) {
            b[k][0] = a[i];
            b[k++][1] = t + 1;
            t = 0;
        }
        else
            ++t;
    for (int i=0; i<k; ++i)
        printf("%lld %lld\n", b[i][0], b[i][1]);
    return 0;
}
posted @ 2021-02-19 10:46  yuzec  阅读(539)  评论(0编辑  收藏  举报