10955. Сад
Байтмен володіє найкрасивішим садом у Байттауні, в якому він посадив \(n\) троянд. Прийшло літо, і квіти виросли великими та красивими. Байтмен зрозумів, що він не в змозі самостійно доглядати всіх троянд, і вирішив найняти двох садівників на допомогу. У цьому випадку йому потрібно вибрати дві прямокутні області, щоб кожен із садівників доглядав троянд в одній з них. Області не повинні перетинатися, і в кожній має бути рівно \(k\) троянд.
Байтмен хоче встановити паркан, що обгороджує прямокутні області. Для економії грошей паркан має бути якомога коротшим. Ваше завдання - допомогти Байтмен вибрати дві прямокутні області.
Сад є прямокутником завдовжки \(𝑙\) метрів і шириною \(𝑤\) метрів, який розділений на \(𝑙 ·𝑤\) однакових одиничних квадратів розміром 1x1 метр кожен. Зафіксуємо координатну систему так, щоб осі координат були паралельні сторонам саду. Всі квадрати мають цілі координати (\(𝑥 ,𝑦 \)), що задовольняють обмежень \(1 \le 𝑥 \le 𝑙\) , \(1 \le 𝑦 \le 𝑤\) . У кожному одиничному квадраті може бути будь-яка кількість троянд.
Сторони прямокутних областей, які вибираються, повинні бути паралельні сторонам саду, а кутові одиничні квадрати – мати цілі координати. Прямокутна область з кутовими одиничними квадратами \((𝑙_1,𝑤_1)\), \((𝑙_1,𝑤_2)\), \((𝑙_2,𝑤_1)\) і \((𝑙_2,𝑤_2)\) (для \(1 \le 𝑙_1 \le l_2 \le l\) і \(1 \le w_1 \le 𝑤2 \le 𝑤 \)):
- містить всі одиничні квадрати з координатами (\(𝑥 ,𝑦 \)), які задовольняють умові \(𝑙_1 \le 𝑥 \le 𝑙_2\) і \(𝑤_1 \le 𝑦 \le 𝑤_2\) , і
- має периметр \(2 · (l_2 -l_1 + 1)+2 · (𝑤_2 −𝑤_1+1)\).
Дві прямокутні області не повинні перетинатися, тобто вони не повинні мати жодного спільного квадрата. Навіть якщо вони мають спільну сторону або її частину, вони огорожуються різними огорожами.
Завдання Напишіть програму, яка:
- читає розміри саду, загальну кількість троянд у саду, кількість троянд, що має знаходитися у кожній прямокутній області, та позицію кожної троянди у саду, що визначається координатами одиничного квадрата, в якому вона знаходиться;
- знаходить кутові одиничні квадрати двох таких прямокутних областей із мінімальною сумою периметрів, які задовольняють заданим умовам;
- виводить мінімальне значення суми периметрів двох прямокутних областей, що не перетинаються, кожна з яких містить точно задану кількість троянд (або єдине слово NO, якщо такої пари прямокутних областей не існує).
Формат вхідних даних
Перший рядок містить два числа: \(𝑙\) і \(𝑤\) (\(1 \le 𝑙 ,𝑤 \le 250\)), розділених одним пробілом – довжину та ширину саду.
У другому рядку задаються два числа: \(𝑛\) і \(𝑘\) (\(2 \le 𝑛 \le 5000\), \(1 \le 𝑘 \le 𝑛 /2\) записаних через пропуск та позначають загальну кількість троянд у саду та кількість троянд, яка має бути у кожній із прямокутних областей.
Наступні \(𝑛\) рядків містять позиції троянд, по одній троянді у рядку. Кожен (\(𝑖+2\))-й рядок містить два числа \(𝑙_𝑖, 𝑤_𝑖\) (\(1 \le 𝑙_𝑖 \le 𝑙\), \(1 \le 𝑤_𝑖 \le 𝑤\)), розділених одним пропуском – координати квадрата, що містить \(𝑖\)-у троянду.
В одному квадраті може міститися дві або більше троянд.
Формат вихідних даних
У єдиний рядок ваша програма повинна вивести одне число - мінімальну суму периметрів двох прямокутних областей, що не перекриваються, кожна з яких містить рівно \(𝑘\) троянд, чи єдине слово NO, якщо таких прямокутників немає.
Приклад вхідних даних
6 5
7 3
3 4
3 3
6 1
1 1
5 5
5 5
3 1
Приклад вихідних даних
22
Коментарі