求教数字去重和排序有关问题~是ACM题,提示小弟我wrong answer.

求教数字去重和排序问题~是ACM题,提示我wrong answer..Description用计算机随机生成了N个0到910305(包含0

求教数字去重和排序问题~是ACM题,提示我wrong answer..
Description
用计算机随机生成了N个0到910305(包含0和910305)之间的随机整数(N≤100000000),对于其中重复的数字,只保留一个,把其余相同的数去掉。然后再把这些数从小到大排序。
请你完成“去重”与“排序”的工作。

Input
输入有2行,第1行为1个正整数,表示所生成的随机数的个数:
N
第2行有N个用空格隔开的正整数,为所产生的随机数。

Output
输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

Sample Input
10
20 40 32 67 40 20 89 300 400 15

Sample Output
8
15 20 32 40 67 89 300 400

Hint
推荐使用scanf printf

输入数据有多组!
[code=C/C++][/code]#include<set>
#include<cstdio>
#include<iostream>
using namespace std;
int a[100000002];
int main()
{
int n,i;
set<int> s;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{scanf("%d",&a[i]);
s.insert(a[i]);}
set<int>::iterator it;
printf("%d\n",s.size());
for(it=s.begin();it!=s.end();it++)
{if(it==s.begin())
 printf("%d",*it);
 else printf(" %d",*it);}
printf("\n");
s.clear();
}
return 0;}


[解决办法]
计数排序吧
WA?感觉应该TLE或者MLE,用g++提交有编译错误。如果是WA的话估计是输出有问题了。
[解决办法]
实际上是超内存了 光一个int a[100000002]; 大概4*10^8B 约为400MB,而Memory Limit: 65536 K
改成这样就AC了。至于为什么是WA,而不是MLE,这我就不知道了

C/C++ code
#include<cstdio>#include<iostream>#include <set>using namespace std;int a;int main(){    int n,i;    set<int> s;    while(scanf("%d",&n)!=EOF)    {        for(i=0;i<n;i++)        {            scanf("%d",&a);            s.insert(a);        }        set<int>::iterator it;        printf("%d\n",s.size());        for(it=s.begin();it!=s.end();it++)        {            if(it==s.begin())                printf("%d",*it);            else                printf(" %d",*it);        }        if(n)            printf("\n");        s.clear();    }    return 0;}