题目:
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
数据范围:
40%的数据满足:1<=n<=1000
80%的数据满足:1<=n<=50000
100%的数据满足:1<=n<=200000,每个数均不超过1 500 000 000(1.5*109)
看完数据范围就懵逼了····
什么鬼数据,,,死大死大的,,
Time Limit Exceeded
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=233333;
int a[maxn]={},sum[maxn]={},shu[maxn];
int main()
{
a[0]=0;
int n,c=0,min,max,b=1;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
max=a[n];
min=a[1];
a[n+1]=0;
for(int i=min;i<=max;i++)
{
int he=0;
for(int j=b;j<=n;j++)
{
if(a[j]!=i)
break;
if(a[j]==i)
{
he++;
sum[c]=he;
shu[c]=i;
}
if(a[j]!=a[j+1])
{
c++;
b=j+1;
break;
}
}
}
for(int i=0;i<c;i++)
cout<<shu[i]<<" "<<sum[i]<<endl;
return 0;
}
好不容易想出来的,,,最后超时了。。心痛。。
但是,在聪明的我费尽心思之后终于想出了正确的代码!!!!
Accepted
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=233333;
int a[maxn]={},sum[maxn]={},shu[maxn],b[maxn]={};
int main()
{
int n,c=0,d=0,he=0;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
if(a[i]!=b[d])
{
d++;
b[d]=a[i];
}
}
d=1;
for(int i=1;i<=n;i++)
{
if(a[i]==b[d])
{
he++;
shu[d]=a[i];
sum[d]=he;
}
if(a[i]!=a[i+1])
{
d++;
he=0;
}
}
for(int i=1;i<d;i++)
cout<<shu[i]<<' '<<sum[i]<<endl;
return 0;
}
为自己鼓掌!!!!!
啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪