高级天翼
3112 统计数字 经验值:400
不许抄袭,一旦发现,直接清空经验!
题目描述 Description
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
输入描述 Input Description
输入包含n+1行;
第一行是整数n,表示自然数的个数;
第2~n+1每行一个自然数。
输出描述 Output Description
输出包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。
每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
样例输入 Sample Input
8 2 4 2 4 5 100 2 100
样例输出 Sample Output
2 3 4 2 5 1 100 2
数据范围及提示 Data Size & Hint
40%的数据满足:1<=n<=1000
80%的数据满足:1<=n<=50000
100%的数据满足:1<=n<=200000,每个数均不超过1500 000 000(1.5*10^9)
这道题写到一半发现桶数组没发开到1.5*10^9,循环次数也要1.5*10^9,会超时,有没有方法呢????
PS:最好附上核心和思路,orz
张恩泽在2020-10-30 19:19:44追加了内容
我也顶!
高级守护
3112 50分代码
#include<iostream>
using namespace std;
long long a[200010],minn=1500000001,cnt;
int main()
{
int n,res;
cin>>n;
res=n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
while(1)
{
minn=1500000001;
for(int i=1;i<=n;i++)
{
if(a[i]<minn&&a[i]!=-1)
{
minn=a[i];
}
}
cnt=0;
for(int i=1;i<=n;i++)
{
if(a[i]==minn)
{
cnt++;
a[i]=-1;
res--;
}
}
cout<<minn<<' '<<cnt<<endl;
if(res==0)
{
break;
}
}
return 0;
}
我尽力了