Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.11.2012, 11:06
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию Поиск прямоугольников

Тренеруюсь в общем в решении задачек, не могу понять в одной что не так

вот задачка http://acmp.ru/?main=task&id_task=193

вот решение мое
[code]затер что бы на олимпиадах гугл не помог)[/quote]

Проверял у себя на придуманных тестах
Цитата:
6 6 5
0 0 0 3 3 0
0 2 2 3 3 0
1 1 2 2 0 0
1 5 5 1 0 0
0 5 4 4 4 0
0 5 4 4 4 0
выдает все правильно, а там на N-ом тесте не верный ответ...

Последний раз редактировалось ALexandr555, 07.11.2012 в 16:44.
Ответить с цитированием
  #2  
Старый 07.11.2012, 12:39
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Ну, сразу видно, что в их ответе (или исходных данных) есть ошибка:
Дают таблицу 5х4, а в ответе среди координат встречаются и (0) и (5), (0) и (4) - или таблица должна быть 6х5 или координаты должны быть
0 0 1 1
1 1 4 3

Код:
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
var FieldArray:array of array of integer;
rectArray:array of array[0..3] of integer;
M,N,K:Integer;
i,j,l:Integer;
f:TextFile;
begin
  AssignFile(f,'input.txt');
  Reset(f);
  Read(F, N, M);
  Read(F,k);
  SetLength(FieldArray,M,N);
   for j:=1 to N do
   for i:=1 to M do
   read(f,FieldArray[i-1][j-1]);
  SetLength(rectArray,K);
  for l:=0 to K-1 do
  begin
   rectArray[l][0]:=M-1; rectArray[l][1]:=0;
   rectArray[l][2]:=0; rectArray[l][3]:=N-1;
   for j:=0 to N-1 do
    begin
     for i:=0 to M-1 do
      begin
        if FieldArray[i,j]=l+1 then
         begin
           if  rectArray[l][0]>i then
            rectArray[l][0]:=i;
           if  rectArray[l][0]<j then
            rectArray[l][1]:=j;
           if  rectArray[l][2]<i then
            rectArray[l][2]:=i;
           if  rectArray[l][3]>j then
            rectArray[l][3]:=j;
         end;
      end;
    end;
  end;
  closefile(f);
  AssignFile(f,'output.txt');
  ReWrite(f);
  for l:=0 to K-1 do
   begin
     write(f,inttostr(rectArray[l][0])+' '+inttostr(N-1-rectArray[l][1])+' '+inttostr(rectArray[l][2]+1)+' '+inttostr(N-rectArray[l][3]));
     writeln(f);
   end;
  closefile(f); 
end.

Мой вариант

Последний раз редактировалось YVitaliy, 07.11.2012 в 13:06.
Ответить с цитированием
  #3  
Старый 07.11.2012, 16:40
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Мое решение оказалось правильным похоже перепутал пути что ли когда отправлял...
YVitaliy у твоего решения на ихних тестах на втором ошибка
пример у них правильный т.к. нижний угол берется на единицу меньше позиции, то есть самый край
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:21.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025