Блог пользователя sdryapko

Автор sdryapko, 14 лет назад, По-русски
С 20 октября по 10 января проходит заочный тур V Открытой олимпиады школьников по программированию. Предлагаю здесь после окончания олимпиады вести обсуждение контеста

Официальный сайт олимпиады: http://olympiads.ru/zaoch/

UPD: Соревнование окончено, можно обсуждать задачи


  • Проголосовать: нравится
  • +5
  • Проголосовать: не нравится

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А не мог раньше сказать. Но я правда и сам знал и даже решал! Я согласен потом обсудить задачи!
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Да логичнее было написать, когда она начиналась либо когда уже кончится)

ну что можно сказать: проблемсет довольно интересный)
Странно, что Gennady Korotkevich еще не все решил, а оставил довольно легкую задачу)
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    В прошлом году это была вроде бы единственная школьная олимпиада которую Гена не смог выиграть (имею ввиду очный тур).
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Сказал один из двух обогнавших Гену людей :)
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Гену в прошлом году от победы отделяла пара неверных байтов.
        Сам виноват, конечно, но лучше бы в будущем итоги большого соревнования не определялись результатами решения одной задачи.
        • 14 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Петрозаводские сборы не раз отделяли победителя от второго места одной задачей
          • 14 лет назад, # ^ |
              Проголосовать: нравится +3 Проголосовать: не нравится
            Здесь другая ситуация.
            Когда из 100 задач одна команда решает 70, а другая 69, причем и состав решенных задач различается, это нормально.
            А когда из 8-ми задач лидеры достаточно легко решают по 7, а разница только в количестве баллов по 8-й задаче, то это, по-моему, не есть хорошо. 
            • 14 лет назад, # ^ |
                Проголосовать: нравится -15 Проголосовать: не нравится
              У нас на летних тренировках в СГУ было что человек(конкретно-я), решив меньшее количество задач, обогнал много кого кто решил больше. Правда это произошло тупо потому что я отжигал на контестах а на дорешивание тупо забил(вернее, не забил,  с ынтернетом у меня были проблемы в это время). Так же в СГУ проводится межвузовская олимпиада, и в секции для начинающих оцениваются баллы по школьной системе. Так там-наоборот, я проиграл всего 5 баллов 

              Zennon из-за того что не дописал красивую заглушку.

              • 14 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                И какое отношение эти факты из Вашей биографии имеют к обсуждаемому вопросу?
                • 14 лет назад, # ^ |
                    Проголосовать: нравится -15 Проголосовать: не нравится
                  Ну, проиграл, обидно:) Ну и что? Каждая система по-своему несправедлива. Справедлив ли ACM формат? Справедливее, чем школьная система, но несправедлив, и если ориентироваться на промышленное программирование, то даже и неправильный(потому что в промышленном программировании не обязательно, чтобы программа работала всегда-ее потом улучшат-а важно чтобы она была как можно быстрее написана и отдана заказчику, а потом ее уже дорабатывают)
                  • 14 лет назад, # ^ |
                      Проголосовать: нравится -10 Проголосовать: не нравится
                    Справедлива ли система подсчета ИТМО? В основном-да, но в некоторых моментах-нет. Справедлив ли КФ или ТС? Опять же, не совсем, можете сами привести примеры.
                  • 14 лет назад, # ^ |
                      Проголосовать: нравится 0 Проголосовать: не нравится
                    Да я вообще не пытался как-то оправдать Генино не 1-е место, если это вообще надо оправдывать -). Все было совершенно справедливо.
                    Но к самому содержанию контеста замечание высказать можно. С надеждой, что в этом году, например, не будет такого рапределения задач по сложности.
                    • 14 лет назад, # ^ |
                        Проголосовать: нравится 0 Проголосовать: не нравится
                      А, вот вы о чем:) Да, я сам сталкивался с проблемой плохого распределения задач по уровню сложности на контесте(что уж говорить про вашего сына, который-сколько уже в спортивном программировании?), когда 10 задач из 11 уровня А+В, а 11-какая-нибудь задачка , ну не знаю, потоки на масочке с геометрией, где еще значение EPS приходится подбирать. В результате кто быстрее печатает-тот и выиграл:)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Отличная идея, хотя не терпится начать прямо сейчас

Вот к примеру странно, что на данный момент уже второй день проверяются видимо все посланные вчера вечером решение (мое по крайней мере как раз с того момента там и лежит). Остается надеяться скорой проверки и ждать вердикта.

14 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
А я-то думал, что организаторы решили приучить людей не дотягивать до последнего))).
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Этим организаторы точно не занимаются, уже стало доброй традицией продление заочного тура с 10 до 15 января. Вроде еще не было ни одного года, чтобы это не случилось.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Кто-нибудь знает сколько человек будет приглашено на очный тур?
14 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
8 января. Оргкомитет Открытой олимпиады по программированию принял решение продлить заочный тур до 15 января. Тур закончится 15 января в 23.59 по московскому времени.

Тем кто поздно начал, есть дополнительное время :)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Как решалась задача J?
14 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Расскажите кто-нибудь задачу про Васю, если не сложно:)
  • 14 лет назад, # ^ |
      Проголосовать: нравится +4 Проголосовать: не нравится
    Динамика по профилю.
    Профиль - это последний столбец. Каждый элемент - либо нолик, либо номер компоненты связности. Т.к. высота небольшая и у каждой компоненты ровно два "выхода", плюс еще их можно перенумеровать без пропусков и по увеличению, получаем ~1000 профилей.
    Далее считаем переходы. Переход - это на текущем столбце 2h способами расставить черточки. Они должны замыкать какие-то компоненты между собой. Могут появится новые. Главное - чтобы все старые не пропали (могут пропасть только все разом).
    А потом динамика: профиль, текущий столбец, начинали ли уже фигурку (чтобы не получилось несколько связных фигур).
    Тестировать можно тупым решением и визуализатором, а также заменой w на h на маленьких тестах (например, 6 7 и 7 6).
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Спасибо, думал о динамике по профилю и понимал, что вроде бы на нее, не зря же одна координата 8, но до конца довести не получилось идею, да и это - не факт что реализовал бы.
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Дайте пожалуйста глянуть на Ваш код задачи про Васю. Спасибо.
      • 14 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
        http://pastebin.com/v9pE4Pmf
        Вот.
        class dss - СНМ
        map<vi, int> ids - номера профилей
        void repaint() - перекрашивает профиль так, чтобы не было неиспользуемых цветов и чтобы они шли по порядку

  • 14 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Расскажите задачу G, пожалуйста (раскраска студентов).
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    я искал циклы четной длины меняя направления - строка -столбец. При четной длине красим все вершины, при нечетной - все кроме первой... Далее красим дерево
  • 14 лет назад, # ^ |
      Проголосовать: нравится -13 Проголосовать: не нравится
    Я делал так:
      Вначале заполнял все W.
      Пока не нашел ответ смотрел можно ли где-нибудь улучшить позицию на столбце или в строке. Если можно улучшал.
    Онлайн группу прошло, не знаю как с оффлайн 
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Выберем клетку, будет ходить из нее лесенкой(то есть один раз по горизонтали, один раз по вертикали), чередуя пол, пока можем, затем выберем другую и т.п.
    Получим либо цикл, тогда в каждой горизонтали/вертикали будет поровну тех и других, либо некий путь, тогда мы "испортили четность" в двух местах.

    Заметив это будем начинать ходить из тех столбиков/строчек, где нечетно было сначала, если таковые имеются, иначе пофиг и все равно получим цикл
    • 14 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
      ПО поводу доказательства- достаточно понять, что мы всегда заканчиваем в нечетный столбец/строку, если получился не цикл.

      Учитывая то, что там где мы закончили, мы уже ничего не будем ставить, то, видимо, можно начинать с произвольных клеток, просто следить с того, с чего мы начинаем. Онлайн тесты одно такое решение тоже прошло.
14 лет назад, # |
Rev. 2   Проголосовать: нравится +9 Проголосовать: не нравится
Построим двудольный граф - столбцы первая доля, строчки вторая доля, ребра соответствуют местам студентов. Нужно раскрасить ребра в 2 цвета так чтобы у каждой вершины разность числа черных ребер и белых была <= 1.
  Достроим граф до эйлерова путем соединения пар нечетных вершин (любым способом). Найдем эйлеров цикл. Покрасим эйлеров цикл путем чередования черного и белого цвета. Удалим добавленые ребра и очевидно что получится требуермая раскраска.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Лучшее решение.
    • 14 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
      Тут еще тонкость, что если есть добавленное ребро, то чередовать надо начинать с него. Потому что цикл может быть нечетным из-за добавленных ребер и тогда последнее ребро будет такого же цвета как первое. А если добавленных ребер нет (граф изначально был эйлеров) то т.к. он двудольный  эйлеров цикл будет четным.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    А всегда ли возможно по столбцам и строкам таблицы, и чтобы ещё и рёбра соответствовали местам студентов построить двудольный граф?

    И почему по Вашему алгоритму получиться требуемая раскраска. Как это можно обосновать? Спасибо.

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
)Кто нибудь скажи плз, из опыта прошлых лет, когда примерно всё должны проверить?)
14 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

Лично мне больше понравилась задача F, хотя она до ужаса элементарная. Я знаю одну игру, которая мне в принципе и помогла ее решить.

Игра "Кант" (не от немецкого философа, а от слова "кантовать")

Для игры требуются:

1. 4 кубика для каждого из 2-х игроков (естественно для первого игрока одного цвета, для 2-ого--другого). Каждый из кубиков имеет следующую развертку:
На одной из граней нарисован нолик. Это единственная грань, использующаяся в игре
На грани, противоположной нолику нарисован крестик.
На оставшихся 4-х гранях нарисованы стрелки, указывающие на грань с ноликом. Это и есть их предназначение.
2. Доска 4*4

Изначально на первой линии стоят кубики 1-ого игрока, на четвертой--кубики 2-ого игрока (в дальнейшем эти линии будут называться линиями 1-ого/2-ого игрока). Все кубики стоят ноликами вверх.

Одним ходом можно перекатить кубик на соседнюю клетку (как и в задаче). Игроки ходят по очереди.

Если какой-то из игроков (пусть первый) поставил один свой кубик ноликом вверх на линию соперника (в данном случае 2-ого), то последний должен за минимальное число ходов убрать все свои кубики со своей линии (если такой возможности вообще нет, то он имеет право ходить как ему вздумается) и в дальнейшем не имеет права перекатить их обратно.

Если какой-то из игроков поставил 2 своих кубика ноликом вверх на линию соперника, то последний должен за минимальное число ходов убрать все свои кубики со своих первых двух линийи в дальнейшем не имеет права перекатить их обратно.

Если какой-то из игроков (пусть первый) поставил 3 своих кубика ноликом вверх на линию соперника, то последний должен за минимальное число ходов "освободить" последний кубик первого игрока если у того было ограниченное поле для ходов этим кубиком.

Выигрывает тот, кто первым поставит все сваои кубики ноликом вверх на линию соперника или тот, чей соперник не сможет сходить.

Примечание 2-ому игроку. Желательно не ходить зеркально, чтобы игра была более менее интересной.

Согласитесь, умение играть в нее поможет при решении подобной задачи. 

  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Возвращаясь к теме Короткевича. Очень странно, что эта задача выполнена у него всего на 88... Странно, странно...
14 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
Еще расскажите, пожалуйста, нормальное решение последней задачи(отрезки на прямой возвращаются-2)

  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я решал также, как и предпоследнюю.
    Двухмерное дерево отрезков. Отрезок - это точка (начало, конец). Отрезок вложен, если он лежит правее (начало больше) и ниже (конец меньше). Проверяем просто: запрос на прямоугольнике. Должно быть ровно две точки.
    Для упрощения запросов можно было еще реверснуть координату X (начало).
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Егор, выложи пожалуйста исходник этой задачи, если не трудно где нибудь?
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        http://pastebin.com/pm9a3Zzr
        Можно написать в пару раз короче.
        Пусть лучше еще кто-нибудь выложит :)
        • 14 лет назад, # ^ |
            Проголосовать: нравится +1 Проголосовать: не нравится
          Ну и понятно - я забыл потестировать на ML.
          Это решение его с успехом получает :)
    • 14 лет назад, # ^ |
      Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится
      у меня за квадрат решение по L получило 100
      и у многих так
      похоже на бред составителей
      или задача на тонкое оценивание ассимптотики )))
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        и по К соответственно тоже за квадрат в основном проходит
        а у меня было быстрое решение
        обидно:(
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      У меня слегка проще по-моему. Упорядочиваем номера отрезков по началу, а при равенстве - по большему концу. Таким образом все отрезки в которые может попасть K-й распологаютя до него. Далее сжимаем координаты концов (начала нам больше не нужны). И при обработке отрезка будем класть в его конец номер по-порядку обработки (в любую структуру типа максимизатора и тд...) Для K ищем максимум от конца отрезка до максимальной границы. И от полученного номера имеем ответ. Для L от конца отрезка до данного ответа. Если максимум соответствует ответу - ок. При получения в качестве максимума 0 смотрим жюри.

          
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Здесь http://mirror.codeforces.com/blog/entry/963 эта задача была засвечена :)

    Думаю, следует обратить внимание на этот комментарий http://mirror.codeforces.com/blog/entry/963#comment-16189

14 лет назад, # |
  Проголосовать: нравится +7 Проголосовать: не нравится
Офлайн-проверка началась. Всем удачи!
14 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
Блин E непонятно почему упала:(

UPD: Кто-нибудь в курсе, они потом сорсы и тесты дают?
  • 14 лет назад, # ^ |
      Проголосовать: нравится +4 Проголосовать: не нравится
    Ну у прошлой олимпиады было: 1 и 2
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Кажется догадываюсь, почему упала E. Извини если мои сомнения по твоему коду ложны, но там нужно было работать длинкой. Там же при самых больших тестах 2^1000 яблок, не меньше. 

    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      длинка была написана)

      ошибся, вместо %=
      написал
      %-

      как итог, когда вылезла за 10в4(основание длинки)  вылез треш. на первых тестах не вылезло. как итог -40

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Прошло квадратичное решение по L, у знакомого по K тоже квадратичное прошло..
Странно
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Печально
    Интересно, собирается ли жюри что-нибудь делать с тестами по этим задачам..
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Да,  как-то нечестно даже получается...
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    А у меня L за квадрат не прошла. 
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      ну хорошо, значит не совсем уж в тупую надо было делать.. пара оптимизов пригодилось
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Квадратные решения дико затянули время тестирования K и L
        • 14 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          по I тоже не слишком быстро тестирование идет
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    По ходу все квадратичные решения L перепроверяются. Возможно с K та же история

    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Идет перетест всех решений по L... Некоторые падают
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        кажется К не собираются перезапускать, мое L как раз тоже упало..(100->80)

        Кстати, кое у кого и 60->80 есть
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

интересно I ещё не проверили или провели и ни у кого нет полного решения?


14 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Поздравляю победителей, пусть и промежуточных!
Проверка завершена.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
у кого-нибудь из здесь присутствующих есть ТЛ по I?
у меня 80, 2 последних теста ТЛ, да и другие последние тоже на грани
как такое может быть? О_о
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Думаю, что это cin.
    Он очень медленно работает.
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      По-моему пора вводить политику коротких входных файлов. Чтоб за время TL можно было считать данные любым способом. Вот на CF, последнее время, так и есть.
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        А еще можно как на TC - параметры
        • 14 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Ага, а еще как на TC - 4 языка программирования.
          • 14 лет назад, # ^ |
              Проголосовать: нравится +3 Проголосовать: не нравится
            Я думаю, что многие(в том числе-один из лидеров, о ком же я?) будет против, если уберут паскаль(хотя этот лидер достаточно хорошо сдает задачки на С++, что подтверждает его 5 позиция на ТС)
            • 14 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Я думаю лидерам (и не только Этому Самому) не проблема писать на другом языке. Разве что узнать стандартные средства языков - время.
              А так-то важнее иметь умение придумать алгоритм.
            • 14 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Ну я имел в виду чуть более широкую позицию: здесь найдутся люди и за ruby и за python. Просто позиция наиболее свободного выбора компилятора на этом сайте для многих - ключевая. Очень хочется ее сохранить.
              • 14 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                А в чем проблема в этих языках передавать в виде параметров?
                Вроде и у Паскаля есть диалекты с ООП
                • 14 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится
                  Если ты пообщаешься с людьми, которые будут делать лучшие языки программирования на следующие 20-30 лет и договоришься о переделке некоторых парадигм программирования, чтоб все поддерживало ООП, то в принципе препятствий нет.
                  Честно говоря я думал, что основная мысль моего комментария: "дело ведь не только в паскале".
                  • 14 лет назад, # ^ |
                      Проголосовать: нравится 0 Проголосовать: не нравится
                    Ну и в руби и в питоне и в php судя по результатам гугла ооп поддерживается)

                    Впрочем, небольшие входные данные - я думаю более хороший вариант решения данной проблемы
                    • 14 лет назад, # ^ |
                        Проголосовать: нравится 0 Проголосовать: не нравится
                      В хаскеле не поддерживается.
                    • 14 лет назад, # ^ |
                        Проголосовать: нравится +3 Проголосовать: не нравится
                      Где тут проблема? Пишите scanf, а не cin, это одна из особенностей языка. Ругаться на нее столь же глупо, как и например на то, что в паскале нет STL. А большие  входные данные во многих задачах нужны, например, чтобы дерево отрезков нельзя было заменить корневой оптимизацией.
                      • 14 лет назад, # ^ |
                          Проголосовать: нравится 0 Проголосовать: не нравится
                        scanf долго писать - лень))
                        просто надо сделать себе еще одну пометку в мозгу - перед считыванием думать,  как считать :)
                      • 14 лет назад, # ^ |
                          Проголосовать: нравится 0 Проголосовать: не нравится
                        Собственно, его(scanf) я и использовал
          • 14 лет назад, # ^ |
            Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
            долбаные пустые комменты
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      да, это именно cin
      обидно, -20 ...
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Появились списки приглашенных на очный тур