按键排序并去重
C++
Hard
sorting
任务 «按键排序并去重»
给定一个整数数组。需要将其按升序排序,并删除所有重复值,但有一个条件:如果某个数字出现超过一次,那么在删除重复项后,它在排序数组中的序号(从零开始的索引)必须等于它在原始数组中出现的次数减一。换句话说,对于每个唯一值 x,它在原始数组中出现 k 次,那么在结果数组中应恰好有一个 x,且其索引应为 k-1。如果对于某个 x 无法满足此条件(例如,索引超出数组范围或已被其他数字占用),则该 x 不包含在结果中。保证所有需要包含的数字都能满足该条件。输出最终按升序排序的数组。
输入格式
第一行:整数 n (1 ≤ n ≤ 10^5) — 元素数量。第二行:n 个整数,绝对值不超过 10^9,以空格分隔。
输出格式
在第一行输出整数 m —— 最终数组中的元素个数。在第二行按升序输出 m 个整数。
示例
示例 1
输入
6
3 1 2 2 3 1
输出
1
3
示例 2
输入
5
5 5 5 5 5
输出
1
5
示例 3
输入
5
Математика Иванов 101 2 3
Физика Петров 202 3 2
Математика Иванов 101 2 3
Химия Сидоров 303 4 1
Физика Петров 202 3 2
输出
3
Математика Иванов 101 2 3
Физика Петров 202 3 2
Химия Сидоров 303 4 1
示例 4
输入
7
4 2 4 2 4 2 4
输出
2
2 4
示例 5
输入
3
Алгебра Смирнов 105 1 1
Алгебра Смирнов 105 1 1
Геометрия Смирнов 105 1 2
输出
2
Алгебра Смирнов 105 1 1
Геометрия Смирнов 105 1 2
main.cpp