前6个点WA,后四个点TLE
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const long long N=50001;
const long long MOD=1037109281137996637;
const long long prime=1999999973;
struct node
{
long long val,rank;
char ss[33];
};
node a[N],s[N];
long long T,n;
bool cmp1(node x,node y)
{
return x.val<y.val;
}
bool cmp2(node x,node y)
{
return x.rank<y.rank;
}
long long hashes(char p[])
{
long long x=0;
int i;
bool ok=false;
if(p[0]=='-')
{
i=1;
ok=true;
}
else i=0;
for(;i<strlen(p);i++)
{
x=(x*10+(long long)p[i])%MOD+prime;
}
if(ok) x=-x;
return x;
}
int main()
{
cin>>T;
long long j,cnt;
for(long long i=1;i<=T;i++)
{
cin>>n;
cnt=1;
for(j=1;j<=n;j++)
{
cin>>a[j].ss;
a[j].val=hashes(a[j].ss);
a[j].rank=j;
}
sort(a+1,a+n+1,cmp1);
for(j=2;j<=n;j++)
{
if(a[j-cnt].val==a[j].val)
{
a[j].val=-2e9;
cnt++;
}
else cnt=1;
}
for(j=1,cnt=0;j<=n;j++)
{
if(a[j].val!=-2e9) s[++cnt]=a[j];
}
sort(s+1,s+cnt+1,cmp2);
for(j=1;j<=cnt;j++) cout<<s[j].ss<<' ';
cout<<endl;
}
}