求教数字去重和排序问题~是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;} 