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

Автор Connector, 13 лет назад, По-русски

Всем привет.

Автором задач сегодняшнего раунда являюсь я. Раунд будет проходить в двух дивизионах. В каждом дивизионе будет предложено по пять задач.  Это мой второй раунд на Codeforces. Персонажами в задачах, как и на прошлом раунде, будут моржи =)

По традиции выражаю огромную благодарность команде Codeforces и Alias за помощь в подготовке контеста.

Желаю всем успеха и пусть победит сильнейший!

UPD1:

Разбаловка задач для div1: 500-1000-1500-2500-2500

Разбаловка задач для div2: 500-1000-1500-2000-2500

UPD2:

Победитель в div1: SergeiRogulenko
Победитель в div2: piotr.mikulski
Мои поздравления!

Разбор

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

13 лет назад, # |
  Проголосовать: нравится +48 Проголосовать: не нравится

Ну и небольшая шутка юмора в в виде бонуса-картинки =)

  • 13 лет назад, # ^ |
      Проголосовать: нравится +4 Проголосовать: не нравится
    Справа морж как то неправдоподобно выглядит, как будто игрушка...Или они обе?
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      По-моему он просто открыл свой ротик чтобы принять пищу из ведёрка. :-)
13 лет назад, # |
  Проголосовать: нравится -21 Проголосовать: не нравится
А, кстати, почему именно моржи? Чем Вам так понравились эти животные?
  • 13 лет назад, # ^ |
      Проголосовать: нравится +12 Проголосовать: не нравится
    Так моржи и сами не против.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +15 Проголосовать: не нравится
    Один из наших ветеранов имеет ник Walrus. На тимусе можно заметить, некоторых людей у которых в качестве страны стоит Антарктика (потому что в списке не было Арктики ;). Ну и когда придумывали, кто будет главным персонажем в задачах первого контеста вспомнили местный мем.
  • 13 лет назад, # ^ |
      Проголосовать: нравится -45 Проголосовать: не нравится
    Чего не сделаешь чтобы показаться забавным и остроумным. 
13 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится
Блин я сейчас на даче с модемным интернетом который не всегда ловит. Даже не знаю писать или нет
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    конечно писать, ведь рейтинг - не главное в жизни :)

    а мне вот придётся не писать из-за злобного препода =(
13 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится
There is, in total,10 problems? Or is it 7 problems with the regular style -> (1 2 (3 4 5) 6 7)?
13 лет назад, # |
Rev. 2   Проголосовать: нравится +14 Проголосовать: не нравится

Codeforces Beta Round #64
By Connector3 months ago
if you wan't to see the problems by the same auther click here

13 лет назад, # |
  Проголосовать: нравится -8 Проголосовать: не нравится
желаю удачи всем участникам!
13 лет назад, # |
  Проголосовать: нравится -6 Проголосовать: не нравится
Как заблокировать задачу?
13 лет назад, # |
  Проголосовать: нравится +31 Проголосовать: не нравится
Сегодня были очень интересные и разносторонние задачи. Спасибо автору
  • 13 лет назад, # ^ |
      Проголосовать: нравится +27 Проголосовать: не нравится
    Поддерживаю. Я не удержался и тоже сел решать :) Не решил D, справился с 4-мя.
    Условия четкие и понятные. Задачи интересные. Спасибо!
    • 13 лет назад, # ^ |
        Проголосовать: нравится +31 Проголосовать: не нравится
      За условия спасибо Артему (RAD), он внес большой вклад в их понятность =)
13 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
Как решалась С, расскажите?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Если учитывать пустую лыжную базу, то число вариантов - 2^число ребер добавленных между уже связными вершинами. А так единичку еще вычесть надо
  • 13 лет назад, # ^ |
      Проголосовать: нравится +6 Проголосовать: не нравится
    Это баян с какого-то старого топкодера, а может, и более древний. Количество обобщённых циклов равно 2^размерность циклового пространства, которая в свою очередь равна m - n + k, где n - число вершин, m - число рёбер, k - число компонент связности.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Надо понять, что циклические множества (= трассы включая пустое множество) образуют линейное подпространство (над F2), а размерность его в случае связного графа G(V, E) равна |E| - (|V| - 1): для этого надо понять, что можно выбрать в качестве базиса. Зафиксируем некоторое остовное дерево, утверждается что базис образуют циклы, образуемые некоторым оставшимся ребром и некоторыми ребрами дерева.
    Т.е. мы знаем в случае связного графа, что ответ равен 2|E| - (|V| - 1) - 1, на несвязный все просто обобщается.

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Кстати, увидев там явно неквадратичные ограничения и конструирование графа в онлайне, я, учитывая личность автора (точнее, задачу C с его предыдущего раунда), ожидал, что решение - какая-то адовая жесть с модификацией алгоритма Тарьяна. И опять моя предвзятость не оправдалась, как и с A.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Сегодняшняя задача B (в первом дивизионе) один из редких случаев, когда STL заруливает дот-нет. Точно знал, как что у дот-нетовских коллекций типа std::map нету lower_bound и upper_bound для поиска ближайшего. Решил, что ну и фиг с ним, напишу на сях++. Оказалось, что и в сях++ не знаю как оно работает, пришлось по ходу дела маны читать, экспериментировать. Кое-как родил что-то кривое. Оно потом ещё и на закомпилировалось системой: оказывается для метода std::reverse надо подключать <algorithm>, в том stl, что с 2010-й студей достаточно было <vector>, а остальные сопутствующие где-то внутрях автоматом подхватываются.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +15 Проголосовать: не нравится
    все идея решения заключалась в сортировке. дальше все тривиально)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Пока что не очень понял, что там сортировкой можно сделать. Посмотрю-ки чужие исходники, может врублюсь.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Вот вдруг моё решение поможет, написано через сортировку.
        505785
        • 13 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится +11 Проголосовать: не нравится

          Чувак, в C++ в библиотеке algorithm лежит нормальный сишный сорт, который очень быстро работает и очень близко к логарифму на любом тесте. Писать на С++ qsort-верх извратства:)
          • 13 лет назад, # ^ |
            Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

            Я был в курсе, с твоим мнением абсолютно согласен.

            Я на самом деле извращенец, ты это правильно подметил.
            Просто периодически возникает желание писать всё вручную не пользуясь библиотеками.
        • 13 лет назад, # ^ |
            Проголосовать: нравится +3 Проголосовать: не нравится
          Сейчас по этой ссылке этот исходник не найти. :-)
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Ой, печально, мне казалось что это работает :(
            То есть если хочется поделиться решением то лучше сторонние сайты использовать, ога?
            • 13 лет назад, # ^ |
                Проголосовать: нравится +4 Проголосовать: не нравится
              Ага. Сейчас пока нет возможности адекватно посмотреть посылки пользователя через профиль.

              Только если через таблицу соревнования снизу в дорешке искать ник пользователя и там для каждой задачи смотреть.

              Вот два предложения с reformal по поводу этого (да-да! ненавистники reformal и daftcoder'а могут начинать минусовать меня тут). Они достаточно высоко (5 и 6 место) и ближайшем будущем наверное можно ожидать появления этих фич.
    • 13 лет назад, # ^ |
        Проголосовать: нравится -13 Проголосовать: не нравится
      Согласен:)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Так ты сдал ее с помощью stl или нет ??? Так как писать декартово было сурово ... лично для меня. А других вариантов я не придумал:(
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +2 Проголосовать: не нравится

      Я придумал sqrt-декомпозицию. И оно зашло.
    • 13 лет назад, # ^ |
        Проголосовать: нравится +4 Проголосовать: не нравится
      Там можно обойтись обычным бинпоиском в массиве. Для каждого суффикса храним минимум на нем и каждый раз выбираем суффикс наименьшей длины, на котором минимум меньше текущего возраста.
      • 13 лет назад, # ^ |
          Проголосовать: нравится +18 Проголосовать: не нравится
        Там можно было отсортировать по возрастанию возраста, при равенстве - позиции и добавлять в таком порядке, поддерживая максимум позиции уже добавленных. Все
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Вот и мне то же самое первым в голову пришло и быстренько закодил.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Вот ведь ... Действительно просто :)
        Спасибо, Наталья.
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      Это и на паскале нормально пишется.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Это ты с А путаешь
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Поправил коммент так чтобы и под А и под Б подходило :)
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Там сортировка нужна. Так что лучше не на паскале
            • 13 лет назад, # ^ |
                Проголосовать: нравится +8 Проголосовать: не нравится
              можно бинпоиск на массиве частичных минимумов. не нужна сортировка, можно и на паскале.
              • 13 лет назад, # ^ |
                  Проголосовать: нравится +4 Проголосовать: не нравится
                Можно. Но это более сложное решение
                Можно все и на бейсике написать (он тут не поддерживается, правда)
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      Сортируем по увеличению возраста пары "возраст - номер". И дальше для каждой пары смотрим, какой максимальный номер был среди строго меньших возрастов - в один проход (храним макс. номер с учетом текущего возраста и макс. номер среди строго меньших возрастов). 
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        мда .. Так еще проще... Более того - я сортировал так стабильно. Но что-то не в ту сторону думал упорно.
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

        Я делал не совсем так. Сортируем по увеличению возраста, при равенстве-по уменьшению номера. В этом случае даже думать не надо-просто храним минимум и с ним сравниваем
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Ну вроде сдал, претесты прошли, но может на финальном тестировании завалится по таймауту. Я 258-й пока что, исходник можешь глянуть там, надеюсь, что правильно, только написано не очень аккуратно.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Интересно стало, что это за идея решения, в котором требуется декартово дерево.
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

        Все элементарно :)
        Добавляешь элементы с начала очереди , для каждого поддерева хранишь максимально дальний элемент. Сплитишь дерево по ключу очередного элемента и получаешь дерево элементов строго меньших текущего, после чего вытаскиваешь ответ на запрос.
        upd: Получается тупое моделирование . Ну и не забываем склеивать потом обратно
  • 13 лет назад, # ^ |
      Проголосовать: нравится +13 Проголосовать: не нравится
    да ладно дерево фенвика и всё окей)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Это один из нередких случаев когда можно подумать и написать программу короче и безо всяких структур и хитрых алгоритмов, чем кидаться сразу писать очевидное решение с декартовым деревом.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Начиная от .NET 4, соответствующий метод есть.
    Класс System.Collections.Generic.SortedSet<T>.
    Метод GetViewBetween.
    Подробнее см. MSDN.
13 лет назад, # |
Rev. 2   Проголосовать: нравится +10 Проголосовать: не нравится

Автору  воздастся - я проиграл ему кружку пива, что же вы так мало E сдавали? Я считал что её будут лучше сдавать чем C.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Не знаю. У меня небанальный тернарный поиск внутри дерева интервалов...
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    У меня было довольно техничное решение с деревом отрезков, в каждой вершине которого я хранил вектор отрезков времен доминирования. Сливал такие вектора за линию. Быстро такое писать не умею, писал минут 45. Есть решение сильно проще?
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +8 Проголосовать: не нравится

      У меня просто дерево интервалов, в котором мы еще знаем когда информация в поддереве устареет т.е. доминировать начнет что-то другое. Реализация у E сложнее, но идейно она проще на мой взгляд. У неё есть множество решений, а в C нужно врубиться про компоненты связности.

      UPD: сортируем запросы по времени, каждая башенка со временем может подыматься в дереве двигаясь к корню (к вершине 1) обгоняя другие башенки, и становясь лидером на все больших интервалах. Каждая башенка может подняться не более LogN раз, надо просто придумать как обновлять дерево так, чтобы выполнить всего не более  NLogN операций
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Это одно из авторских решений. Оно требует O(n log n) памяти. Можно было использовать sqrt декомпозицию. Она работает быстрее из за меньший размер памяти O(n) и меньше беготни по памяти.
13 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

За полчаса до конца контеста был вынужден выйти, теперь не могу даже зайти в соревнование. Поправьте, пожалуйста.
13 лет назад, # |
  Проголосовать: нравится +23 Проголосовать: не нравится
Could you please start system testing?
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Наконец нашел баг в своем решении Д. Ждем дорешивания.
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Мое решение вот уже несколько минут "выполянется на тесте 16" о О Перезагрузите там что нибудь...
    UPD. Спасибо за перезагрузку. Полное решение. Эх, я был близок...

    Спасибо автору за контест:)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Аналогично не добил на контесте... Задача интересная) Не учел, что можно три тройки поделить на две пятерки(
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Я наглючил с разбиением длинных циклов на мелкие.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Блииииин я тоже не догадался 3 тройки на 2 пятёрки ((((
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          На самом деле 2 тройки за 1 пятерку превращаются в двойку. Мне так легче было думать. Я только забыл про случай когда у нас нету 2к и 1 3ка
13 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится
Михаил Расихович, а согласно какой логике сначала проверяется второй дивизион, а только потом первый?
  • 13 лет назад, # ^ |
      Проголосовать: нравится +6 Проголосовать: не нравится
    Может Артем добавляет некоторые тесты из взломов по задачам D, E? Может еще с чем-то разбирался.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Спасибо. Как я понял, раздача результатов проверки запускается вручную, что позволяет администрации, в принципе, и в обоих дивизионах добавлять тесты.
13 лет назад, # |
Rev. 2   Проголосовать: нравится +38 Проголосовать: не нравится

The statements are easy to understand, I like this :d.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Div2 Problem C: system test is weak?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    What makes you say that? Any test that you think should be there and it isn't?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Why you think so?
    • 13 лет назад, # ^ |
        Проголосовать: нравится +10 Проголосовать: не нравится
      Because my solution is accepted :)

      After I locked C problem. Trying to hack my solution, and my solution got TLE. And I using that test and hacked 5 other coder`s solution. (Therefore test is suitable)

      But my solution is accepted in final test.
13 лет назад, # |
Rev. 2   Проголосовать: нравится -15 Проголосовать: не нравится

Ребят, я дебил, как А решать? :-D
  • 13 лет назад, # ^ |
    Rev. 4   Проголосовать: нравится 0 Проголосовать: не нравится

    Хранишь для каждого символа, места где он встречается, потом перебираешь s2, ищешь следующий s2[i] символ после текущего места, если его нет, то увеличиваешь ответ и ищешь сначала.

    UPD: ищешь бинпоиском конечно, а не за линию. итого |s2|*log |s1|

    UPD2: С прямыми руками заходит
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Странно, почему TL? Я также написал, 130 мс.
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится -41 Проголосовать: не нравится

        оО ну значит как всегда кривые руки видимо
        сууууука. перепутал местами размеры массивов. Заваленный контест №N подряд, и всё же по такой тупости %)
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Тут должен быть не TL, a WA на претесте.
          mesto=v[c][0]+1
          и
          mesto=*it+1
          Так должно быть.
          Я написал ваш вариант сначала, и получил WA на претесте.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            У меня upper_bound, поэтому не должно быть в этом проблемы
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              А да, не заметил.
              И зачем использовать массивы чаров, когда есть string? И с cin/cout все задачи нормально заходят.
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                Пару раз попадался на том, что cin/cout или вектора вместо массивов не заходили, для больших объемов поэтому юзаю так.
        • 13 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

          ты перепутал длины have и need. ты выходишь за границу массива и дальше уже не пойми че творится, то ВА, то ТЛ.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      что почему  TL? всё проходит же...
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      А у меня не TL

      Правда, все равно, здравствуй, div-2 :(
      Офигеть, с одной поздней задачей, в третьей сотне, и всего-то -67 рейтинга
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

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

    А то, можно ли записать, проверяем просто - все ли буквы второго слова есть в первом.

    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Ну второе-то понятно. Блин, прыгал... я дебил...
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

        Да ладно, я тоже сначала затупил. Смотрю, очевидное решение вроде не проходит, думаю, ну, раз это A и Прудаев в составлении участвовал, значит какая-то хрень с хешами, которые все писать умеют, а я нет... Написал B через дерево интервалов, потом только вернулся к A.
        • 13 лет назад, # ^ |
            Проголосовать: нравится +5 Проголосовать: не нравится
          Хах, значит я не один ждал хэши, когда увидел Сашу в авторах =)
          • 13 лет назад, # ^ |
              Проголосовать: нравится +5 Проголосовать: не нравится
            Сейчас я только решал задачи. Вносил некоторые изменения в условия.
            А задачкой на хеш я вас еще порадую :)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Точно так же делал, побоялся на списках TLE схватить
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Запомним для каждого символа из первой строки позиции, в которых он встречался. будем поддерживать текущую позицию pos в первой строке и идти указателем по символам второй. если окажется, что какой-то символ s2 не встречался в s1, то выводим -1.
    иначе, для массива позиций символа ищем первый, который идет после pos. если такого нету, то увеличиваем счетчик ответа, и pos присваем первую позицию, где этот символ встретился. иначе, обновляем pos.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Эх, надо было спать идти. В итоге полу-сонный завалил контест. В A тупой баг и +2, в B вообще решение с деревом отрезков. В C подсознательно всплыло, что ответ должен быть 2^(что-то), но было поздно.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Can any one explain the logic behind Problem D Div2 ? And the order in which it can be solved ? 

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

    O(nlog(n))   :(
    1.Sort the numbers and (in a pair store their index as well, it will be used later).
    2.Now scan the sorted array, and while going right keep calculating maxIndex till now. 
    Store the difference between maxIndex and the current element's index.(if positive).
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    I didn't had the chance to try it, but looks like some sort of inversion count variant. I would suggest that you wait till the editorials are up. :)
    • 13 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится
      Yes my solution is using BIT, similar to inversion count but I search for maximum value here..
13 лет назад, # |
  Проголосовать: нравится +38 Проголосовать: не нравится
У меня предложение со следующего раза ввести единую нумерацию задач: A, B, C, D, E для div2 и C, D, E, F, G для div1. А то больно много путаницы получается: не все понимают пока, что div1 B и div2 D, например, одно и то же.
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
damn i wrote the code for D  i just clicked submit n time got over :-( bad luck  :-( 
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Ratings got updated for DIV-2 ??

13 лет назад, # |
Rev. 2   Проголосовать: нравится +10 Проголосовать: не нравится

Interesting contest.

Kind of guessed the answer in C and was pretty close in D.

I'm waiting for the editorial, especially for the proofs of C and D.
13 лет назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится
Div-1 problem D
bool used[10000]; //on the contest RE 10
bool used[100000]; //after the contest AC


  • 13 лет назад, # ^ |
      Проголосовать: нравится -7 Проголосовать: не нравится
    Why not vector?
    • 13 лет назад, # ^ |
        Проголосовать: нравится +2 Проголосовать: не нравится
      Sometimes it's slow.
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

      vector<bool> used(10000,0);
      So what? %)
      I'll better consider something like: 
      #define SIZ 100000
      And, of course, after that I have to consider C# or Java as a first language. At least they will fail on the local testing. (C++ is such a badass language that even 90000 out of the bounds call didn't fail on the local testing).
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +6 Проголосовать: не нравится

        No
        vector <bool> used(n);
        vector under MSVS debug mode will also throw RTE if accessed out of bounds
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
       
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I am very suprised.In problem B,div2,I use string always got RE on pretest 2,but I  use char got AC,why??whether it is relative to the head files,I type #include<string.h> and #include <string>

13 лет назад, # |
  Проголосовать: нравится +26 Проголосовать: не нравится
I passed problem E with time 4920ms ... Lucky guy I am, right~?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Ofcourse you are lucky , Every-one. (atleast me ,) dreams of such a day.
    But I think I need to wait 2 more years for div1 E aand that too with such timing .
13 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
Nice Contest and well framed , short and crisp problem statement
13 лет назад, # |
Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

Thanks for the contest! The problems were excellent, varied, the statements were very clear, and I'm very curious about the problems that I didn't solve, which is the way it should be :)

BTW, I thought that more people would implement a brute-force approach in Div1 A (maybe they did in Div2 C). It looked like a good hack target but I only managed to find three slow solutions in my room.

Waiting for the editorial :)

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Автору: можно как-то узнать тест 16 к Div 2 D полностью? У меня отличается 1360-ое число, которое я не могу увидеть... :(
13 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится
Good contest!

For problem B, I have read the statement twice and ask 2 questions then understand it.
I don't think this statement is so clear, but others is really clear.
 
For problem C, it's a little bit unusual.
But if you know some connections between graph and linear algebra then it will be really easy.

For problem E:
Is someone solved it by divide the people into groups?
1.Prepare: for each group, calc all important time and at that time who is the best.
Cost time O(BA2logA) where A is the amount of people in a group, B is the amount of groups.
2.Query: for the groups by binary search, and combine the left-most and right-most single ones.
Cost time O(Q(B+A)logA).
For A = B = sqrt(Q):
The time complexity is O(N1.5logN).
But I can't pass.


  • 13 лет назад, # ^ |
    Rev. 4   Проголосовать: нравится +8 Проголосовать: не нравится

    I haven't got time to implement the following idea.
    Use offline method to handle queries, the binary search won't be necessary.
    sort all queries by time, and insert them into "groups", for each group, the time is sorted and some linear scanning may work.
    still lots of minor things had to be considered to achieve O(n^1.5) complexity, and this solution may result MLE with a poor implementation.
13 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится
I forgot to use stable_sort and I did not know that I could sort with pairs, or I could pass Div I B in 12 minutes :(
Anyway, learning is always happy:)
13 лет назад, # |
  Проголосовать: нравится +32 Проголосовать: не нравится
I think that you should improve hacking interface. It is very slow and sometimes didn't open properly (I had to open some solutions for several times, before I could see the source). Also when I was reading somebody's code I got some strange messsage about reading the solution for too long and the hacking window closed.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Also the option to upload testcase in plain text format should be added(or is it already possible?)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      I don't think it should... uploading large files would put a bigger strain on the server (connection, actually) even than the hassle to compile and run the test generator. This option is missing for a purpose.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Anyone for Div-2 E explanation .... plz
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Только мне кажется что в нескольких последних контестах как-то странно изменяется рейтинг.
Вот например у adry за последнее место в диве 2, рейтинг упал только на 69 пунктов, у durt за последнее место в диве1, рейтинг упал на 70 пунктов. Как-то странно это.
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +7 Проголосовать: не нравится

    Да, и рейтинг у див2 почти не меняется, если не занять какое-нибудь особенно хорошее место.
    • 13 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится
      раньше за такое особенно хорошее место давали >+200, а сейчас бы +100 получить
      • 13 лет назад, # ^ |
          Проголосовать: нравится +5 Проголосовать: не нравится
        Извините, можно личный вопрос? Просто очень любопытно. Судя по Вашим комментам, Вы в соревнованиях активно участвуете, и не только на Codeforces, так зачем же в обсуждениях пишете из-под нерейтингового аккаунта?
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          ок. специально для вас поучаствую в следующем раунде-стнау рейтинговым)
      • 13 лет назад, # ^ |
          Проголосовать: нравится +4 Проголосовать: не нравится
        Ну, с другой стороны, теперь, чтобы выйти в див1, нужно действительно тянуть на див1.
13 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
Это все из-за того что нету общих контестов где Div. 1 и Div. 2 вместе пишут. И неизвестно когда будет такой. Видимо это теперь вошло в привычку.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    ИМХО, совсем не из-за этого. Раньше на совмещённых контестах рейтинг считался всё равно отдельно.
    Вот, кажется, основная причина.

    Тему эту уже подняли в прямой эфир.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Ясно. Кстати очень тяжело перейти в див. 1, надо решать побольше чем 2 задачи :)
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

        В див. 1 ещё хуже - там часто можно не решить ни одной (учитывая, что первые две простые задачи в первом диве нет).
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Заметил, ты был на грани

          208 daftcoder 1150

          Hacks: +6 / -3

          A: -1  

          B: 700 - 01:15

          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Да я в A спросоня написал палево с целью поломать других - у меня это и получилось (550 pts за взломы с 500pts-задачи).

            Затем долго думал как же лучше написать B, придумал, и ещё решил поломать непонятное мне, но как оказалось правильное решение. :-)

            А вообще я пишу for fun. Rating, конечно, приятно, но это не главное, тем более для меня. :-)
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              А задачи дорешиваеш после контестов или нет?
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                Чаще всего не сразу, но если что-то интересное, то обычно сразу дорешиваю.

                А так иногда пачками беру задачи и решаю/отсылаю.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Так это весьма логично, особенно если говорить о последнем раунде.
        Ведь Div.2 C в нем совпадала с Div.1 A.
        Т.е. решив только две задачи во втором дивизионе получается что в первом ты бы не решил ни одной? Тогда значит рано тебе туда, ведь заметь, там А решили почти все.
        И вообще, здесь довольно высокий уровень первого дивизиона, кажется повыше чем на топкодере. Да еще и шкала рейтинга сильно растягивается и тяжело прогнозировать куда все это ведет.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Учитывая, что я на решение A и B потерял потратил 25 минут, я могу бы дорешать (D - Div. 2, B - Div. 1)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Wow, this is a really fun contest! Too bad I missed it :(

Does anyone know when is the next contest?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    I don't know but I think that next contest will start next week. But I hope that administration prepare and start contest, for example, in Saturday evening.
    • 13 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится
      TCO Round 2 on Saturday evening
      • 13 лет назад, # ^ |
        Rev. 3   Проголосовать: нравится +1 Проголосовать: не нравится

        Нда, точно... это нужно еще дождаться пока кто-то не подготовит раунд... и выбрать подходящее время.

        P.S. не подумал про TopCoder поскольку не участвую в их отборочных раундах.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
as for the Ski Base,I don't understand the analysis of it,I can't clearly understand why the solution is correct.Can anyone explain to me? Thank you 
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    Every graph with even degree for all of its vertices is a sky base. If you don't know why, then study Eulerian circuits. So we are counting sub-graphs with all vertices having even degree. Consider a spanning tree for each of the components of the graph. All other edges not in the spanning tree have two possibilities for existence. And the existence of edges in the spanning tree is determined uniquely after that. So every time we add an edge to a component the number of even degree sub-graphs is doubled. But when we connect two of the components the answer doesn't change (Why?).
    Hope it helps, sorry for bad English.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I need clarification for problem E(div 2). Specially i m very much confused about the paragraph

"Let's consider the ski base as a non-empty set of roads that can be divided into one or more tracks so that exactly one track went along each road of the chosen set. Besides, each track can consist only of roads from the chosen set. Ski base doesn't have to be connected."

What is meant by this paragraph......................


13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
I could not understand the editorial of problem C in div 2 and A in div 1 related to newspaper headline and why it is tagged as binary search and how the solution could be implemented as binary search. I doubted on whether somebody will read it or not but just want to say that please provide more explanation in editorials rather than providing few lines, although a problem could be easy for good coders but for beginner it is the ladder, so please don't make it difficult to climb.
  • 13 лет назад, # ^ |
    Rev. 4   Проголосовать: нравится +1 Проголосовать: не нравится

    See Burunduk1's code , it is very clear.
    suppose the target word is abcd
    Then in the source word , first search for a then search for b , but don't start search from start, instead search from the position you last found the matching character that is a in this case.
    Why we are doing this :: Because we don't want to take new headline unnecessarily .
    By checking whether we can find b next-to where we found a , we can save 1 headline-expense. If b is not found next(next does not necessarily mean adjacant) to a . We will have to use another headline. So, then search the source string(that is the headline),from start for b. Doing this again and again will provide you how many headlines you need. But this is SO costly. Every time you will have to search for a character in O(n) time. So, you see, this is very costly , given such constraints. So, we use binary search. We binary search for the next position where the next character to be searched is located. Suppose a was found at 5th   position, now we want to find b, nearer to 5th position but on the right side.
    How do we do this::
    Do pre-processing, store all b's location in a array.
    Then binary search for 6 , if there is position greater than equal to 6 . that should be our next b's position. If no b is found after 5th position ::
    Take new headline. :( 
    Doing this for all characters , will produce the answer.

    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Thanks for explaining how binary search is implemented in this problem, but I could not understand the portion related to binary search of Burunduk1's code.
      I have added few lines to understand what is going on on test case 2 of the example (abcd,dabc)....
      forn(i, tn)
        {
          vi &v = pos[t[i] - 'a'];  
      // v[3]=3 for 'd'

          int j = lower_bound(all(v), p) - v.begin();
      // can't understand.
      have read about lower_bound.but how p=0 will find 3 in vector
          printf("%d\t%d\n", j,p);  
          if (j >= sz(v))            
            cnt++, p = v[0] + 1;
          else
            p = v[j] + 1;

        }
        printf("%d\n", cnt);

      and I got this as the output:
      0    0
      1    4
      0    1
      0    2
      2
       could you please explain me little bit more as I am unable to correlate the output to the input with the help of code?
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        "but how p=0 will find 3 in vector"

        lower_bound finds next integer that is greater than or equal to supplied one. (here 0).
        ---------------------------------------
        if source string is abcd.
        then v for d's case will be {3} since the only d is at 3.
        and lower_bound will return that.


        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Thanks for correcting me. Now I still have 2 doubts.
          1. If the target is "dabc" and source is "abcd", then after 'd' p=4, so for target: 'a': v[0]=0; then how p=4 in lower_bound will give j=1?
          2. What I have learned from Top coder algorithm tutorial and recipes is that to use binary search there should be predicate which is true for some interval and false for other interval. so we continuously divide the search space until found the correct one. But in this case we are maintaining separate container for every alphabet in source and storing its position. then we are applying steps you mentioned but how this is binary search? How have we divided the search space?

          Lastly could you refer me more problem like this for practice.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            1. When  'd' is found .
            p becomes 4.
            Then in vector v for 'a'. there is no such 'a' with position >= 4. So, p will now change to 0.[new headline required] (it will not go into if part , it goes to else part.)

            2.See, you got a sorted sequence of numbers. All you required is to find, a number which is "just" greater than or equal to some number say x.
            Take a example instead,
            1,2,3,4,4,5,5,6,7,8.
            can you find 4 using binary search.
            it is pretty simple.
            (I will leave it for you)
            hint:: search in last ,if greater search in-between first and last , if smaller search between....so on and so forth...

            Lastly, there are lots of problem on binary search , here and at topcoder.
            Use Google (and the word "archive")  
            • 13 лет назад, # ^ |
                Проголосовать: нравится +5 Проголосовать: не нравится
              http://www.cplusplus.com/reference/algorithm/lower_bound/ see::binary search code for lower bound. This site is very helpful. My doctor told me to see this five times a day. :)
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Thanks a lot for clearing lot of things but my doubt still persists. Let me rephrase the question.

              1. "how p=4 in lower_bound will give j=1?"
              for case 'a', vector v[0]=0 has only 1 element whose index or position is 0, which is represented by j. but then how j is giving value 1?

              All the vectors in this case are maintaining only single element then j must be 0 for all the cases. So why it is giving 1 in case of 'a'.

              2. if (j >= sz(v))   cnt++, p = v[0] + 1;

              this part of code is incrementing cnt or new headline and if p reaches end of the sorted values in vector then starting once again it from beginning. and

              else
                    p = v[j] + 1;

              this part is putting next value in sorted array of vector v in p.

              So where are we dividing the search space? I suppose we are only iterating in the vector.

              Likewise you mentioned in binary search we first search middle value then look at whether to search in [mid+1,high] or [low,mid+1], then further divide. but in this case how it is binary search.

              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                1.j becomes 1 , because it reached the end of the list while searching for 4.
                (v.end() - v.begin() = 1)
                2.We are not doing binary search either in "if" or "else" part.
                rather the function lower_bound is doing binary search.[See c++ code of lower_bound]
                --------------------------------------
13 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

-- не туда
»
4 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

D was a bit tricky. Spent lot of time in debugging.