Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 
Вернуться
Тема: Задачу Н решал рекурсией , не проходит на 31 тесте. как можно по-другому?
1
  1  Нигматуллин Нияз Габдуллазянович [СПбГУ ИТМО], 30 декабря 2009 г. 17:24:16
      каждое состояние можно закодировать, например, номером мультиперестановки(перестановки с повторениями), которую образуют буквы. Тогда можно будет легко узнавать номер из состояния и состояние из номера. Тогда надо всего лишь закодировать начальное состояние и конечное, и когда в обходе в ширину мы дошли до конечного сотояния, можно сразу же выводить ответ. Граф сам хранить не надо, просто пробовать менять на каждом шагу символ # с соседним.
  2  Чабаненко Владислав Дмитриевич, 28 декабря 2009 г. 9:49:18
      а как проверять, что мы дошли уже до нужного состояния? не понял, насчёт хранения графа
  3  Нигматуллин Нияз Габдуллазянович [СПбГУ ИТМО], 27 декабря 2009 г. 17:34:13
      а как рекурсией, по состояниям?
по-другому, так. Пусть у нас есть какое-то положение наших букв, тогда представим себе граф, где вершина это состояние, а ребро это переход из одного состояния до другого. Наша задача превратилась в нахождение кратчайшего пути в невзвешенном графе. найдем его обходом в ширину. Состояние можно закодировать числом, чтобы было удобно сохранять в позициях, которых мы были. Сам граф хранить явно не надо, просто для каждого состояния пробуем поменять две буквы, # и ее соседнюю.
всего состояний не больше 8! = 40320, ребер не больше 8! * 4.
1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2026, ИНН 246305493507, E-mail: admin@acmp.ru