用c++做统计数字怎么做?某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果.数据范围:某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果.40%的数据满足:1
2019-04-14
用c++做统计数字怎么做?
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果.
数据范围:
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果.
40%的数据满足:1
优质解答
由于该题的n过大 所以一般地最坏情况为平方级的排序可以排除
由于鉴于每个自然数的范围过大 所以桶排序可以排除
那么接下来我们就可以用堆排做这道题
以下为我在RQNOJ上AC全部通过的程序:
#include
using namespace std;
const int N=200008;
long long a[N];
void dui(int v,int n)
{
int i,j;
i=v;j=i*2;
a[0]=a[i];
while(j=1;i--)dui(i,n);
for(i=n;i>=2;i--){
a[0]=a[i];
a[i]=a[1];
a[1]=a[0];
dui(1,i-1);
}
p1=a[1];
for(i=1;i
由于该题的n过大 所以一般地最坏情况为平方级的排序可以排除
由于鉴于每个自然数的范围过大 所以桶排序可以排除
那么接下来我们就可以用堆排做这道题
以下为我在RQNOJ上AC全部通过的程序:
#include
using namespace std;
const int N=200008;
long long a[N];
void dui(int v,int n)
{
int i,j;
i=v;j=i*2;
a[0]=a[i];
while(j=1;i--)dui(i,n);
for(i=n;i>=2;i--){
a[0]=a[i];
a[i]=a[1];
a[1]=a[0];
dui(1,i-1);
}
p1=a[1];
for(i=1;i