↧
时间限制:2 秒
内存限制:2 兆
特殊判题:否
提交:2650
解决:418
现在有n个数,其中有一些出现了一次,一些出现了两次,一些出现了很多次。现在要求你找出那些只出现一次的数,并按升序输出。
本题有多组case。
每个case有两行,第一行输入一个n,表示有n个数,1<= n <= 1000000。
第二行有n个数字。每个数字的大小范围[1, 1000000]。
每次输出有两行。
第一行输出一个整数,表示出现一次的数的个数。
第二行按升序输出出现次数为一次的数字,两个数字之间用空格隔开。
5 1 2 2 3 3 7 1 2 2 3 4 4 2 2 2 2
1 1 2 1 3 0
#include<cstdio> #include<bitset> using namespace std; int main() { bool flag; int n,t,m,i; while(scanf("%d",&n)!=EOF&&n) { m=n; bitset<1000001> v,vv; for(i=0;i<n;++i) { scanf("%d",&t); if(v[t]==0) v[t]=1; else if(v[t]==1 && vv[t]==0) { vv[t]=1; m-=2; } else --m; } printf("%d\n",m); for(i=1,flag=false;i<1000001 && m>0;++i) { if(vv[i]==0 && v[i]==1) { if(!flag) { printf("%d",i); flag=true; } else printf(" %d",i); --m; } } printf("\n"); } return 0; } /************************************************************** Problem: 1402 User: 3011216016 Language: C++ Result: Accepted Time:990 ms Memory:1196 kb ****************************************************************/