过了,但有疑惑
查看原帖
过了,但有疑惑
1013837
Tiskan_H楼主2024/10/2 09:42

为什么在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;
}

我看这输出都是一样的啊

2024/10/2 09:42
加载中...