الفرز حسب المفتاح مع إزالة التكرارات
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