top of page

Задача: Генератор кроссвордов

 

Имя входного файла:        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.

bottom of page