Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 253
от 18.11.2006, 22:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 217, Экспертов: 48
В номере:Вопросов: 1, Ответов: 1


Вопрос № 62499: Помогите пожалуйста решить задачу! Хотя бы основную идею решения. Итак, задача: В классе N учеников. Марья Ивановнв попросила некоторых из них прочитать книгу. Книга существует в одном экземпляре. Поэтому решено было отдать книгу одному из уч...

Вопрос № 62.499
Помогите пожалуйста решить задачу! Хотя бы основную идею решения.
Итак, задача:
В классе N учеников. Марья Ивановнв попросила некоторых из них прочитать книгу. Книга существует в одном экземпляре. Поэтому решено было отдать книгу одному из учеников. Он должен прочесть ее и отнести другому ученику, кто еще не читал книгу. В свою очередь, этот ученик, после прочтения книги, передаст ее еще кому-нибудь, кто не читал ее и т. д. Класс организован недавно => не все знают адреса друг друга, а именно: для любых двух учеников из класса только один из них обязательно знает адрес другого. Необходимо составить список из нескольких учеников таким образом, чтобы их количество было максимальным и каждому ученику (за исключением последнего) был известен адрес следующего за ним по списку одноклассника.
В первой строке входного файла содержится число N(3<N<300)- кол-во учеников в классе. В следующих N строках идет описание класса. В (i+1)-ой строке записано N нолей или единиц. 0 на j-ой позиции означает, что ученик с номером i не знает адрес ученика с номером j, 1 означает, что знает. Считается, что ученик не знает своего собственного адреса. Гарантируется, что для любых двух учеников ровно один из них знает адрес другого.
В выходной файл выведите последовательность чисел соответствующую максимальному по длине списку. Нумерация должна быть такая же как и во входном файле. Время выполнения программы-2сек. Ограничение по памяти-64Mb

Приложение:

Отправлен: 13.11.2006, 21:29
Вопрос задал: Ch_k (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Verena
Здравствуйте, Ch_k!
Можно попробовать загнать информацию о классе в двумерный массив записей такого вида:
Type klass = record
adr: integer;
kn: boolean;
End;
Var a: array [1..300,1..300] of klass;
Потом возьмём дополнительную матрицу в две строки, куда будем записывать альтернативные пути обхода - текущий и предыдущий. При обходе матрицы - описания класса будем проверять: если адрес известен (текущий adr=1) и книги у претендента ещё не было (его kn=false), то можно туда пойти. Сделав два обхода сравним результат по количеству элементов в 1 и 2 строках вспомогательной матрицы, выбираем лучший из них, записываем в 1-ю строку и сравниваем дальше. А чтобы сэкономить память можно использовать динамические массивы вместо статических.
---------
Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: 2-ой класс)
Ответ отправлен: 13.11.2006, 22:04


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное