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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

16 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится
Еще расскажите, пожалуйста, нормальное решение последней задачи(отрезки на прямой возвращаются-2)

  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Я решал также, как и предпоследнюю.
    Двухмерное дерево отрезков. Отрезок - это точка (начало, конец). Отрезок вложен, если он лежит правее (начало больше) и ниже (конец меньше). Проверяем просто: запрос на прямоугольнике. Должно быть ровно две точки.
    Для упрощения запросов можно было еще реверснуть координату X (начало).
    • 16 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Егор, выложи пожалуйста исходник этой задачи, если не трудно где нибудь?
    • 16 лет назад, скрыть # ^ |
      ← Rev. 3  
      Проголосовать: нравится 0 Проголосовать: не нравится
      у меня за квадрат решение по L получило 100
      и у многих так
      похоже на бред составителей
      или задача на тонкое оценивание ассимптотики )))
    • 16 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      У меня слегка проще по-моему. Упорядочиваем номера отрезков по началу, а при равенстве - по большему концу. Таким образом все отрезки в которые может попасть K-й распологаютя до него. Далее сжимаем координаты концов (начала нам больше не нужны). И при обработке отрезка будем класть в его конец номер по-порядку обработки (в любую структуру типа максимизатора и тд...) Для K ищем максимум от конца отрезка до максимальной границы. И от полученного номера имеем ответ. Для L от конца отрезка до данного ответа. Если максимум соответствует ответу - ок. При получения в качестве максимума 0 смотрим жюри.

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

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

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

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

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

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

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

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

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

16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Прошло квадратичное решение по L, у знакомого по K тоже квадратичное прошло..
Странно
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

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


16 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
Поздравляю победителей, пусть и промежуточных!
Проверка завершена.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
у кого-нибудь из здесь присутствующих есть ТЛ по I?
у меня 80, 2 последних теста ТЛ, да и другие последние тоже на грани
как такое может быть? О_о
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Появились списки приглашенных на очный тур