Загрузка [MathJax]/jax/output/HTML-CSS/fonts/TeX/fontdata.js

printРабочее место участника

printЗадачи

1044. Разделение на районы

Ограничения: время – 1s/2s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Город 4е сильно вырос и было решено разделить его на 4 района. Город имеет форму квадрата размером N  кварталов. Каждый квартал либо застроен зданием, либо является пустым. Для разделения на районы нужно провести две прямые линии между кварталами – по вертикали и горизонтали – таким образом, чтобы количества зданий в каждом районе не слишком сильно отличались.
Напишите программу, которая по плану города вычислит способ разделения города на 4 района, минимизирующий значение выражения ∑(K_i-K/4)^2, где K – количество зданий в городе, K_i – количество зданий в i-м районе. Если существует несколько вариантов с минимальным значением, то вывести из них тот вариант, в котором минимально значение выражения ∑(S_i-S/4)^2, где S\ =\ N^2 – общая площадь города, S_i – площадь i-го района. При одинаковых значениях обоих выражений выбрать минимальное значение для положения горизонтальной границы, затем – вертикальной.
Во входном файле несколько тестовых случаев. Каждый тест начинается со строки, содержащей одно целое число N (2\ ≤\ N\ ≤\ 500) – размер города. Далее следует N строк, содержащих по N символов – план города. Символ '#' означает квартал со зданием, символ '.' – пустырь. Набор тестов заканчивается строкой, содержащей число 0.
Для каждого тестового случая вывести строку, содержащую два целых числа, разделенных пробелом – положение вертикальной, затем горизонтальной линий разделения города на районы. Верхний левый угол имеет координаты (0,0), правый нижний – (N,N).

Пример ввода

4
####
#...
.#..
..#.
3
#.#
.#.
#.#
0

Пример вывода

2 1
1 1
loading