На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Контрольная
    Тут такая задача:

    Учитель провел контрольную работу. Ученики сидели за одним длинным столом. После контрольной ученики выходили из-за стола по одному, каждый раз выходил один из сидящий с краю, подходил к столу учителя и клал свою тетрадь сверху стопки или подсовывал ее вниз. Выяснить, сколькими различными способами при этом могло получиться, что тетради легли в алфавитном порядке фамилий их владельцев.

    Входные данные:
    В первой строке количество учеников, в следующих строках - их фамилии в порядке следования за столом.
    Выходные данные:
    Найденное количество способов.

    Пример входных данных:
    3
    ИВАНОВ
    СИДОРОВ
    ПЕТРОВ
    Пример выходных данных:
    3

    Технические ограничения:
    В классе не более 50 российских учеников, среди которых нет однофамильцев.
    Примечание:
    Способы считаются различными, если они различаются порядком складывания тетрадей (кто именно клал тетрадь i-м по счету).

    Итак. Ну, проблем с сортировкой фамилий нет. Условие понятно, но котелок недоваривает. sad.gif
    Попробовал начиркать в блокноте все варианты - для данного примера оказалось 16 штук (кол-во способов складывания тетрадей (4) * кол-во способов порядка выхода учеников (4) = 4 * 4 = 16).
    С ответом сошлось. Но если перебирать все это, когда в классе 50 учеников?!, то...

    В общем, буду благодарен за любую полезную идею. smile.gif
      Можно заметить, что количество способов увеличивается, когда у нас появляется альтернатива -- выйдет крайний справа или крайний слева ученик... Допустим, в такой альтернативной ситуации, мы фиксируем крайнего правого ученика, тогда количество способов в етой точке увеличивается на столько, сколько крайних левых учеников может выйти, и положить свои тетради...

      Тогда, видимо, можно использовать динамическое программирование, начав с ученика, выходящего последним (таких в общем случае двое -- первый по алфавиту и последний по алфавиту), добавляя к нему учеников справа и слева. В конце для каждого ученика должно получиться количество вариантов, в которых крайний правый ученик выходит первым и в которых крайний левый ученик выходит первым. Их просуммировать smile.gif

      (Способ сводится к подсчету количества вариантов получения заданной рассадки из алфавитного списка по тем же правилам)
      Сообщение отредактировано: Visitor -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0.0588 ]   [ 15 queries used ]   [ Generated: 5.10.26, 23:52 GMT ]