0#include<bits/stdc++.h>//学的第一篇题解(但是蒟蒻不认识那个语言)
using namespace std;
const int mode=51371;
const int prime=1926817;
int t,n,temp,vis[mode+1000];
int read()//快读
{
int x=0,f=1;char ch=getchar();
while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
int hash(int num){//vis[i]数组里存的是以i为哈希值的数
int ha=(num%mode+mode+prime)%mode;
while(vis[ha]!=num&&vis[ha]){
ha=(ha+prime)%mode;
}//vis[ha]==ha说明这个数已经出现过了,vis[ha]==0说明第一次出现
return ha;
}
int main(){
cin>>t;
while(t--){
n=read();
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;++i){
temp=read();
int h=hash(temp);
if(vis[h]==0){//若没出现则把它存下来
vis[h]=temp;
printf("%d ",temp);
}
}
cout<<"\n";
}
}
这道题调了一晚上了QAQ(蒟蒻求助)