时间限制: 1 Sec 内存限制: 64 MB提交 状态
题目描述
某次科研调查时得到了n个自然数,每个数均不超过1500000000 (1.5×109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
输入
第1行是整数n,表示自然数的个数; 第2~n+l每行一个自然数。
输出
共m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
样例输入 Copy
8 2 4 2 4 5 100 2 100样例输出 Copy
2 3 4 2 5 1 100 2提示
40%的数据满足:1≤n≤1000; 80%的数据满足:1≤n≤50000, 100%的数据满足:1≤n≤200000,每个数均不超过1.5×109。
#pragma GCC optimize(1) #pragma GCC optimize(2) #pragma GCC optimize(3,"Ofast","inline") #include <iostream> #include <bits/stdc++.h> using namespace std; typedef long double ll; int a[200005]; void quick_sort(int start,int last) { int i=start; int j=last; int temp=a[i];/// if(i<j) { while(i<j) { while(i<j&&a[j]>=temp) j--; if(i<j)///a[j]<temp { a[i]=a[j];///temp存a[i] i++; } while(i<j&&temp>a[i]) i++; if(i<j) { a[j]=a[i]; j--; } } a[i]=temp; quick_sort(start,i-1); quick_sort(i+1,last); } } int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } quick_sort(1,n); int cnt=1; //for(int i=1;i<=n;i++) // printf("%d ",a[i]); // puts(""); for(int i=2;i<=n+1;i++) { if(a[i]==a[i-1]&&i>1) { cnt++; } else { printf("%d %d\n",a[i-1],cnt); cnt=1; } } // printf("%d",a[n],cnt); return 0; }