Ви навчаєте клас учнів із цікавими уподобаннями того, як влаштовані їхні стільці. Існують 3 дуже специфічні вимоги щодо розташування стільців:
Вони найбільш розташовані у прямокутнику, навіть якщо це означає, що деякі стільці залишаються порожніми.
Повинно бути якомога менше порожніх стільців.
Вони повинні бути максимально «квадратними». Квадратність визначається відстанню між шириною та висотою прямокутника, нижче нижча. Наприклад, прямокутник, який є,
4x7
має прямокутність 3.
Якщо бути більш конкретним, "оцінка" розташування - це відстань між шириною і висотою плюс кількість стільців, які будуть порожніми.
Візьмемо приклад. Скажімо, у вас 13 учнів. Ви можете влаштувати стільці будь-яким із цих способів:
1x13
2x7
3x5
4x4
1x13
не дуже просторий. Насправді 1 і 13 розташовані на 12 один від одного, тому ми даємо цю домовленість 12 балів. У нього також є 0 порожніх стільців, тому ми додаємо 0 балів, даючи цьому розташуванню бал 12. Не так вже й чудово.
2x7
це, звичайно, краще. 2 і 7 - лише 5 один від одного, тому ми даємо цій домовленості 5 балів. Однак якщо ви насправді влаштували 2 ряди семи стільців, це займе 14 стільців, значить, один стілець буде порожнім. Тож ми додаємо один бал, даючи цій схемі оцінку 6.
Ми також могли б зробити 3x5
. 3 і 5 - 2 однакові, тому +2 бали. Це займає 15 стільців, це означає, що у нас буде два зайвих крісла, тож ще +2 бали, за рахунок 4.
Останній варіант, 4x4
. 4 і 4 - один від одного, тому ми даємо це +0 балів. 4x4 займає 16 стільців, тому 3 стільці залишаються порожніми, загальна оцінка 3. Це оптимальне рішення.
У випадку краватки, оптимальне рішення - рішення з менш порожніми стільцями.
Змагання
Ви повинні написати програму або функцію, яка займає ціле число і виводить оптимальне розташування стільців для такої кількості студентів. IO може бути в будь-якому розумному форматі. Ось вибірки для будь-якої кількості студентів від 1 до 100:
1: (1, 1)
2: (1, 2)
3: (2, 2)
4: (2, 2)
5: (2, 3)
6: (2, 3)
7: (3, 3)
8: (3, 3)
9: (3, 3)
10: (2, 5)
11: (3, 4)
12: (3, 4)
13: (4, 4)
14: (4, 4)
15: (4, 4)
16: (4, 4)
17: (3, 6)
18: (3, 6)
19: (4, 5)
20: (4, 5)
21: (3, 7)
22: (5, 5)
23: (5, 5)
24: (5, 5)
25: (5, 5)
26: (4, 7)
27: (4, 7)
28: (4, 7)
29: (5, 6)
30: (5, 6)
31: (4, 8)
32: (4, 8)
33: (6, 6)
34: (6, 6)
35: (6, 6)
36: (6, 6)
37: (5, 8)
38: (5, 8)
39: (5, 8)
40: (5, 8)
41: (6, 7)
42: (6, 7)
43: (5, 9)
44: (5, 9)
45: (5, 9)
46: (7, 7)
47: (7, 7)
48: (7, 7)
49: (7, 7)
50: (5, 10)
51: (6, 9)
52: (6, 9)
53: (6, 9)
54: (6, 9)
55: (7, 8)
56: (7, 8)
57: (6, 10)
58: (6, 10)
59: (6, 10)
60: (6, 10)
61: (8, 8)
62: (8, 8)
63: (8, 8)
64: (8, 8)
65: (6, 11)
66: (6, 11)
67: (7, 10)
68: (7, 10)
69: (7, 10)
70: (7, 10)
71: (8, 9)
72: (8, 9)
73: (7, 11)
74: (7, 11)
75: (7, 11)
76: (7, 11)
77: (7, 11)
78: (9, 9)
79: (9, 9)
80: (9, 9)
81: (9, 9)
82: (7, 12)
83: (7, 12)
84: (7, 12)
85: (8, 11)
86: (8, 11)
87: (8, 11)
88: (8, 11)
89: (9, 10)
90: (9, 10)
91: (7, 13)
92: (8, 12)
93: (8, 12)
94: (8, 12)
95: (8, 12)
96: (8, 12)
97: (10, 10)
98: (10, 10)
99: (10, 10)
100: (10, 10)
Як завжди, це код-гольф, тому застосовуються стандартні лазівки, а переможець - найкоротша відповідь у байтах.