为什么在13行加上
if(a.num==b.num) return a.id<b.id;
就过了,不加却不行呢
0分:
#include <bits/stdc++.h>
#define int long long
#define inf (long long)10000000000
using namespace std;
int t,n;
struct node{
int num,id;
}a[50010];
int cmp1(node a,node b){
return a.num<b.num;
}
int cmp2(node a,node b){
return a.id<b.id;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].num;
a[i].id=i;
}
sort(a+1,a+n+1,cmp1);
for(int i=1;i<=n;i++){
int j=i+1;
while(a[i].num==a[j].num){
a[j].num=inf;
j++;
}
}
sort(a+1,a+n+1,cmp2);
for(int i=1;i<=n;i++)
if(a[i].num!=inf)
cout<<a[i].num<<" ";
cout<<endl;
}
return 0;
}
100:
#include <bits/stdc++.h>
#define int long long
#define inf (long long)10000000000
using namespace std;
int t,n;
struct node{
int num,id;
}a[50010];
int cmp1(node a,node b){
if(a.num==b.num) return a.id<b.id;
return a.num<b.num;
}
int cmp2(node a,node b){
return a.id<b.id;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].num;
a[i].id=i;
}
sort(a+1,a+n+1,cmp1);
for(int i=1;i<=n;i++){
int j=i+1;
while(a[i].num==a[j].num){
a[j].num=inf;
j++;
}
}
sort(a+1,a+n+1,cmp2);
for(int i=1;i<=n;i++)
if(a[i].num!=inf)
cout<<a[i].num<<" ";
cout<<endl;
}
return 0;
}
我看这输出都是一样的啊