【ETOJ P1012】排序去重问题 题解(集合)

69 阅读1分钟

题目描述

给定一个大小为 nn 的数组 aa,请将 aa 中元素去重后从小到大排序输出。

输入格式

第一行一个整数 TT 表示测试样例个数。 (1T100)(1≤T≤100)

对于每一个测试样例:

  • 第一行一个整数 nn 表示数组大小。 (1n103)(1≤n≤10^3)
  • 第二行 nn 个整数表示数组元素。 (1ai500)(1≤a_i≤500)

输出格式

对于每个样例,在一行输出结果后换行。

样例输入1

2
5
1 1 3 2 2
3
1 2 3

样例输出1

1 2 3
1 2 3

思路

set容器的特性是所有元素都会自动排序,并且不包含重复的元素。

首先,通过cin >> t;从输入中读取测试用例的数量。然后进入一个循环,每次循环开始时,都会清空set容器s1,然后通过cin >> n;读取每个测试用例中的元素数量。

接着,进入另一个循环,每次循环都会读取一个元素a,并将其插入到set容器s1中。由于set容器的特性,所有插入的元素都会自动排序,且不包含重复元素。

最后,通过一个范围for循环遍历set容器s1,并将容器中的每个元素输出,实现了排序和去重的功能。在每个测试用例处理完之后,都会输出一个换行符,表示这个测试用例的结果已经输出完毕。


AC代码

#include <algorithm>
#include <iostream>
#include <set>
#define AUTHOR "HEX9CF"
using namespace std;

int t, n;
set<int> s1;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	cin >> t;
	while (t--) {
		s1.clear();
		cin >> n;
		while (n--) {
			int a;
			cin >> a;
			s1.insert(a);
		}
		for (auto &i : s1) {
			cout << i << " ";
		}
		cout << endl;
	}
	return 0;
}