Структура (колекція) set від власного класу — 1
Перегляд у форматі PDFЗадача в цілому аналогічна задачі «Структура (колекція) set»
(і наполегливо рекомендується зробити спочатку її), але елементами повинні бути не числа,
а дещо складніші об'єкти: прямокутники, кожен з яких описується довжинами двох своїх сторін a, b
(два цілі числа) та кольором (string) col. Повертати прямокутники дозволено (b×a – те само, що a×b),
а колір враховується. Інакше кажучи, елемент-прямокутник належить множині тоді й тільки тоді,
коли множина містить елемент-прямокутник, в якого такі самі розміри,
але порядок цих розмірів може бути хоч таким самим, хоч переставленим;
при цьому колір повинен бути таким самим (у смислі звичайної case-sensitive рівності рядків).
Кожен із запитів ADD та/або PRESENT має по три параметри a b col, саме в такому порядку.
Вони задаються в одному рядку через пробіли.
Напишіть програму, яка виконуватиме послідовність запитів виду:
ADDa b colPRESENTa b colCOUNT(без параметрів).
Програму обов'язково слід писати за допомогою бібліотечного типу (колекції) set
(її реалізації в конкретних мовах програмування можуть називатися
HashSet, TreeSet, SortedSet, ...).
Виконання кожного запиту виду ADD a b col повинно додавати прямокутник до множини
(якщо такий само прямокутник вже є, додавання ще однієї копії не змінює множину).
На екран при цьому нічого не виводиться.
При виконанні кожного запиту виду PRESENT a b col має видаватися
повідомлення YES або NO (великими літерами, в окремому рядку),
відповідно до того, чи є такий елемент-прямокутник у множині;
значення множини при цьому не змінюється.
При виконанні кожного запиту виду COUNT має видаватися на екран в окремому рядку
кількість різних елементів-прямокутників у множині; значення множини при цьому не змінюється.
Вхідні дані
У першому рядку задано кількість запитів ~N~ (~5\leqslant N\leqslant 2\cdot10^5~), далі йдуть ~N~ рядків, кожен з яких містить по одному запиту згідно з описаним форматом. Всі параметри a та b є цілими числами від 1 до 1234567890. Всі параметри col є рядками, що містять від 1 до 15 латинських (англійських) літер, без будь-яких інших символів.
Результати
Виводьте окремими рядками результати запитів PRESENT (рівно одне YES чи NO великими буквами)
та COUNT (рівно одне число); на запити ADD нічого не виводьте.
Приклади
Вхід
11
ADD 5 2 red
COUNT
PRESENT 5 2 red
PRESENT 5 2 ReD
PRESENT 2 5 red
ADD 2 5 green
COUNT
ADD 2 5 red
COUNT
ADD 5 2 red
COUNT
Результат
1
YES
NO
YES
2
2
2
Примітки
Перша відповідь 1 правильна, бо на той момент множина містить рівно один елемент-прямокутник 5 2 red.
Друга відповідь YES правильна, бо коли питають про наявність прямокутника, з такими самими розмірами 5 2
в такому ж порядку, причому такого самого кольору red, то він вже наявний.
Третя відповідь NO правильна, бо хоч розміри 5 2 такі самі в такому ж порядку,
але колір інший (case-sensitive передбачає, що ReD не дорівнює red).
Четверта відповідь YES правильна, бо розміри 2 5 є тими самими числами
(хоч і в іншому порядку), що й 5 2, і колір правильний.
П'ята відповідь 2 правильна, бо перед тим був запит ADD з елементом-прямокутником,
що відрізняється від вже наявного кольором, тому тоді його додали, від чого кількість елементів множини змінилася.
Шоста відповідь 2 правильна, бо перед тим був запит ADD з елементом-прямокутником 2 5 red,
що (незважаючи на переставляння місцями чисел) вважається рівним одному з уже наявних у множині
прямокутників 5 2 red, тому множина не змінилася й продовжує містити рівно 2 елементи-прямокутники.
Сьома відповідь 2 правильна, бо перед тим був запит ADD з елементом-прямокутником,
за всіма ознаками рівним вже наявному (найпершому) елементу-прямокутнику,
тому множина не змінилася й продовжує містити рівно 2 елементи-прямокутники.
Абсолютно повне виконання завдання передбачає, що воно виконане і через бібліотечну колекцію HashSet
(з написанням власних GetHashCode та Equals), і через бібліотечну колекцію SortedSet
(з написанням власного компаратора).
В разі виконання іншою мовою програмування, з'ясуйте відповідні деталі самостійно,
але це повинен бути бібліотечний спосіб через хеш-таблиці та бібліотечний спосіб через дерева.
Само собою, можна виконати частину, на відповідну частину балів.
Коментарі