Детали
(Время: 1 сек. Память: 16 Мб Сложность: 20%)
Подсчитаем, сколько пустых клеток находится между двумя деталями в каждой строке. Из всех строк выберем ту, в которой это количество минимально (или одну из них, если таковых несколько). Покажем, что число пустот в этой строке и будет ответом на задачу.
Если мы сдвинули деталь B на одну клетку влево, то количество пустот в каждой строке уменьшится на единицу. Деталь упрётся лишь в том случае, когда в какой-то строке пустоты во-обще исчезнут, а одной из первых таких строк будет именно выбранная. Осталось заметить, что, так как за каждый сдвиг число пустот в выбранной строке уменьшалось на единицу и в конце оно стало равным нулю, то количество сдвигов и есть начальное количество пустот в строке.
Приведем одну из возможных реализаций решения данной задачи:
read(n,m)
min=101
for i=1..n{
read(s)
p=0
for j=1..m
if(s[j]='.') p=p+1
if(p < min) min=p
}
write(min)
|