Задача: Генератор кроссвордов
Имя входного файла: crossword.in
Имя выходного файла: crossword.out
Ограничение по времени: 2 секунды
Ограничение по памяти: 64 мегабайта
Ипполит, полиглот и эрудит, хочет составить самый большой в мире кроссворд из пятибуквенных слов. По следующему алгоритму:
Ипполит составил сжатое описание сетки кроссворда - таблицу n*m, состоящее из черных и белых клеток. В полной версии каждая белая клетка сжатого описания должна быть заменена на 4 пятибуквенных слова. В конце все квадраты у которых есть общее ребро, должны быть соединены дополнительным пятибуквенным словом.
Program C;
Var
input,output:text;
inArray: array [1..40,1..40] of char;
ouArray: array [1..240,1..240] of char;
n,m,i,j,k:byte;
Begin
Assign(input, 'crossword.in');
Reset(input);
Assign(output, 'crossword.out');
Rewrite(output);
read(input,n);
readln(input,m);
for i:=1 to 6*n-1 do
for j:=1 to 6*m-1 do
ouArray[i,j]:='#';
for i:=1 to n do
begin
for j:=1 to m-1 do
begin
Read(input,inArray[i,j]);
end;
Readln(input,inArray[i,m]);
end;
for i:=1 to n do
for j:=1 to m do
if inArray[i,j] ='.' then
begin
for k:=1 to 5 do
begin
ouArray[6*(i-1)+k,6*(j-1)+1]:='.'; //вертикальная левая
ouArray[6*(i-1)+k,6*(j-1)+5]:='.'; //вертикальная правая
ouArray[6*(i-1)+1,6*(j-1)+k]:='.'; //горизонтальная верхняя
ouArray[6*(i-1)+5,6*(j-1)+k]:='.'; //горизонтальная нижняя
end;
end;
for i:=1 to n-1 do
if (inArray[i,j]='.') and (inArray[i,j+1]='.') then
begin
ouArray[6*(i-1)+3,6*(j-1)+4]:='.';
ouArray[6*(i-1)+3,6*j]:='.';
ouArray[6*(i-1)+3,6*j+2]:='.';
end;
for i:=1 to m-1 do
if (inArray[i,j]='.') and (inArray[i+1,j]='.') then
begin
ouArray[6*(i-1)+4,6*(j-1)+3]:='.';
ouArray[6*i,6*(j-1)+3]:='.';
ouArray[6*i+2,6*(j-1)+3]:='.';
end;
for i:=1 to 6*n-1 do
begin
for j:=1 to 6*m-1 do
Write(output,ouArray[i,j]);
writeln(output);
end;
Close(input);
Close(output);
End.