题目描述:
给出一串数字,去除重复元素,保留第一个元素
题目分析:
这算是省选签到题目吗(雾
sort排一波去重,在按照位置sort一波即可
题目链接:
Ac 代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
const int maxm=51000;
struct node{
int num,id;
}a[maxm],b[maxm];
int read()
{
int x=0,w=1;
char ch=0;
while(ch<'0'||ch>'9')
{
if(ch=='-') w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<3)+(x<<1)+ch-'0';
ch=getchar();
}
return x*w;
}
bool comp1(node x,node y)
{
return x.num==y.num?x.id<y.id:x.num<y.num;
}
bool comp2(node x,node y)
{
return x.id<y.id;
}
void work()
{
int n,cnt=0;
n=read();
for(int i=1;i<=n;i++)
{
a[i].num=read();
a[i].id=i;
b[i].num=b[i].id=0;
}
std::sort(a+1,a+n+1,comp1);
for(int i=1;i<=n;i++)
if(a[i].num!=b[cnt].num) b[++cnt]=a[i];
std::sort(b+1,b+cnt+1,comp2);
for(int i=1;i<=cnt;i++)
printf("%d ",b[i].num);
puts("");
}
int main()
{
int T;
T=read();
while(T--)
work();
return 0;
}