题解:P1097 [NOIP2007 提高组] 统计数字

· · 题解

题目传送门

思路:

把数字从大到小排序。如果 a_i = a_{i+1},也就是这个数和后面的那个数相同,那么计数器加一;否则输出这个数然后输出这个数的个数。

代码:

#include<bits/stdc++.h>
using namespace std;
int a[200005];
int n;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    sort(a+1,a+1+n);
    s=1;
    for(int i=1;i<=n;i++){
        if(a[i]==a[i+1]) s++;   //计数器加一
        else{
            cout<<a[i]<<" "<<s<<endl;  //输出答案
            s=1;   //重置
        }
    }
    return 0;
}