Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2018, 17:28   #1
artemihch
 
Регистрация: 28.11.2018
Сообщений: 4
Сообщение Ферзя в угол

Всем привет, решаю задачу на acmp 476, и не понимаю почему выдаёт ошибку на втором тесте. Двойки - места, где второй игрок победит, единицы - где победит первый. Двойки получаются находятся друг от друга в шаге коня (2 вправо, 1 вверх либо 1 вправо и 2 вверх)

Код:
var
  ar: array[1..1000, 1..1000] of integer;
  j, i, m, n, c, k: integer;
  f_in,f_out:text;
begin
  assign(f_in,'input.txt');
  assign(f_out,'output.txt');
  reset(f_in);
  read(f_in,m,n);
  close(f_in);
  for i := 1 to m do
      ar[1, i] := 1;
  for j := 1 to n do
      ar[j, 1] := 1;
  if m > n then
    for i := 2 to n do
        ar[i, i] := 1
  else
    for j := 2 to m do 
        ar[j, j] := 1;

  ar[1, 1] := 2;
  
j:=1;

for i:=2 to m do begin
j:=j+2;
ar[i,j]:=2;
ar[j,i]:=2
end;

for i:=1 to m do
  for j:=1 to n do
    if ar[i,j]=0 then ar[j,i]:=1;

if (n=1) and (m=1) then ar[1,1]:=1;

  rewrite(f_out);
	write(f_out,ar[n,m]);
  close(f_out);
end.
artemihch вне форума Ответить с цитированием
Старый 28.11.2018, 20:42   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от artemihch Посмотреть сообщение
Двойки получаются находятся друг от друга в шаге коня
Это неправильно. И, соответственно, алгоритм заполнения таблицы - неправильный
Black Fregat вне форума Ответить с цитированием
Старый 28.11.2018, 22:45   #3
artemihch
 
Регистрация: 28.11.2018
Сообщений: 4
По умолчанию

подскажите пожалуйста тогда алгоритм, потому что я считал, что двойки расположены в тех местах, где можно попасть только в единичку, и тогда по этому алгоритму они находятся именно так
artemihch вне форума Ответить с цитированием
Старый 28.11.2018, 23:31   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от artemihch Посмотреть сообщение
двойки расположены в тех местах, где можно попасть только в единичку
Не совем. Единицы расположены в тех местах, откуда можно попасть в двойку

Алгоритм:
1. Заполняем квадрат нулями
2. Берем ближайший к началу координат 0 (по манхеттеновскому расстоянию, то есть можно перебирать по прямым x + y = const).
3. Ставим на его место 2.
4. От этой двойки "прочёркиваем" единицами через всю таблицу горизонталь, вертикаль и диагональ
5. возвращаемся на п.2

Вот одна половина до 40:
Код:
2,3
4,6
5,8
7,11
9,14
10,16
12,19
13,21
15,24
17,27
18,29
20,32
22,35
23,37
25,40

Последний раз редактировалось Black Fregat; 28.11.2018 в 23:34.
Black Fregat вне форума Ответить с цитированием
Старый 28.11.2018, 23:45   #5
artemihch
 
Регистрация: 28.11.2018
Сообщений: 4
Печаль

Хорошо, тогда как понять, где находится тот самый нуль, от которого мы строим, или можете объяснить, как надо перебирать?
artemihch вне форума Ответить с цитированием
Старый 29.11.2018, 04:36   #6
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от artemihch Посмотреть сообщение
как понять, где находится тот самый нуль
Цитата:
Сообщение от Black Fregat Посмотреть сообщение
ближайший к началу координат по манхеттеновскому расстоянию
Цитата:
Сообщение от artemihch Посмотреть сообщение
как надо перебирать?
Цитата:
Сообщение от Black Fregat Посмотреть сообщение
перебирать по прямым x + y = const
Что именно непонятно?
Black Fregat вне форума Ответить с цитированием
Старый 29.11.2018, 06:58   #7
artemihch
 
Регистрация: 28.11.2018
Сообщений: 4
По умолчанию

как перебирать по x+y=const, какую константу брать надо
artemihch вне форума Ответить с цитированием
Старый 29.11.2018, 08:20   #8
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Константу увеличивать надо. 0, 1, 2..
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задана шахматная доска, содержащая черного короля,черных пешек и белого ферзя. Определить какими пешками можно совершить ход, чтобы черный король не был под ударом ферзя. Megabuzz Помощь студентам 0 09.11.2018 19:43
Ход ферзя iSkulll Паскаль, Turbo Pascal, PascalABC.NET 2 04.05.2011 11:37
УГОЛ-фи DRAgon™ Паскаль, Turbo Pascal, PascalABC.NET 3 19.08.2010 13:33
Поиск пути на шахматной доске ходом ферзя A!eI{S@nDrA Помощь студентам 2 16.06.2009 09:51
Угол по тангенсу AVer Общие вопросы Delphi 9 01.02.2007 12:47