luogu 1059
经典桶排题。
用一个桶记录某个数是否出现过。
#include"cstdio" #include"cctype" int read() { int c,x=0; while(!isdigit(c=getchar())); while(x=x*10+c-'0',isdigit(c=getchar())); return x; } int y[1001]; int main() { int n=read(),cnt=0; for(int i=1; i<=n; i++) { int v=read(); if(!y[v]) y[v]=1,cnt++; } printf("%d\n",cnt); for(int i=1; i<=1000; i++) if(y[i]) printf("%d ",i); return 0; }
或者使用C++自带的unique函数。
它需要先sort。
然后用此函数去重,返回的是去重后最后一个数的后面一位的地址。
#include"cstdio" #include"cctype" #include"algorithm" using namespace std; int read() { int c,x=0; while(!isdigit(c=getchar())); while(x=x*10+c-'0',isdigit(c=getchar())); return x; } int a[101]; int main() { int n=read(); for(int i=1; i<=n; i++) a[i]=read(); sort(a+1,a+n+1); n=unique(a+1,a+n+1)-a-1; printf("%d\n",n); for(int i=1; i<=n; i++) printf("%d ",a[i]); return 0; }