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

Автор mkagenius, 12 лет назад, По-английски
Теги tco
  • Проголосовать: нравится
  • +9
  • Проголосовать: не нравится

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

If you allready qualified — do not forget about parallel rated round

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

    Can I participate(unofficially, but rated) if I didn't qualified to 2nd round?

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

      From the rules:

      For each of Online Rounds 2B, 2C and 3B, TopCoder will organize a parallel round (with the same problems) where the Competitors who have already advanced will be able to compete.

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

    Btw do you know the reason for that restriction (only those who qualified)? Server load or something like that? Doesn't seem very fair.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +22 Проголосовать: не нравится

      TopCoder philosophy is that participation in round is award by itself. Also it is done to battle cheating

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

Is site loading for anyone? Or arena? I can't even register:(

UPD: Починили

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

Registration is prolonged by 10 minutes because of connection problems

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

Автор 300-ки (особенно автор формата входных данных), убейся.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    Формат тот еще, да, но задача вполне номальная.

  • »
    »
    12 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится +11 Проголосовать: не нравится

    Насколько я понимаю, они не поддерживают vector<vector >, поэтому приходится так издеваться. Не первый раз такое, думаю, надо отнестись с пониманием. (Что-то верстка захавывает int).

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

      В какой-то мере объясняет, но вызывает сразу два других вопроса.

      А почему у них не поддерживается вектор векторов? (впрочем, способ задания входных данных в арене уже почти причина...)

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

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

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

        Есть принятое ограничение на максимальную длину строки в 50 символов. Поэтому если представлять вектор чисел строкой с разделителями, то кол-во элементов верктора будет сильно меньше 50.

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

          Один раз видел, когда действительно данные разделялись запятыми, т.е. формат был примерно такой: "Дан вектор строк, соедините все строки в одну, получите строчку, содержащую входные данные, разделенные запятыми". Не сказал бы, что это проще для реализации. Но тут плюс в плане наглядности.

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

            Но так 30^2 четырехзначных чисел все равно не передать.

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

У меня одного челлендж-фаза не началась?

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

Кто может сказать, какую дорогу и как надо изменить в 300-ке в Sample 7 (последний)?

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

    надо уменьшить что-то. это поможет потом.

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

      А можешь сказать, какую именно дорогу? Я так и не смог отдебагать.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +6 Проголосовать: не нравится

    d[18][10]=1

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

    У меня этот семпл не проходил, т.к. некоторая дорога становилась равной -1.

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

      Ага, у меня похожая ошибка :(

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

      Моя прога вообще находила БОЛЬШЕЕ решение О_о Не могу понять, каким образом.

      UPD: расстояния должны быть СТРОГО положительными. Подозреваю, что в этом косяк. :(

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

        Установил 0 вершину как посещенную?)

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

        У меня тоже. Такой тест на самом деле составить несложно.

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится +6 Проголосовать: не нравится

        Моя тоже находила большее решение. Ошибка оказалась в том, что в какой-то момент я дороге хотел поставить длину 0 (это затем увеличивало ответ), а по условию минимальная длина — 1.

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

        Если сделать дорогу с нулевой длиной.

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

Есть идеи что не так в 900? Насколько я понял условие "одновременности", что если одна команда кинула землю на сектор в один день, то другая команда нам том секторе может эту же землю поднять и перекинуть, но так даже семплы не совпадают)

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

    "Что не так" — похоже, решение жюри :)

    Upd: а с семплами всё ок, команды перекидывают землю одновременно, и землю чужой команды на том же ходу использовать нельзя.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +5 Проголосовать: не нравится

      Как я понимаю, решение жюри все же почти верное и уж лажало не на семплах.

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

      Что не так с 900? Почему under investigation?

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

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

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +23 Проголосовать: не нравится

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

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится +23 Проголосовать: не нравится

        Ну в некотором роде я тоже пострадал. Ибо, зная неплохой случай для челенжа, получил 0, и не попал в ТОП50. Но случай был...

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

    Решение расскажи, иначе как понять, что в нем не так.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится

      "Что не так" относилось к "Problem 900 is under investigation"

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

        Не разобрался:( Просто у меня есть вопрос, на чем меня зачелленджили — думал, у тебя такая же проблема.

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

Как решать 500 и 900? Вроде у всех достаточно простые с виду решения, а в голову только какой-то треш со структурами данных (в 500) лезет.

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

    Аналогично, сидел прикручивал какие-то структуры, но ничего толкового не вышло

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

    500: посчитаем сначала количество треугольников вида x[r] < x[g] < x[b], y[r] < y[b] < y[g] и x[r] < x[g] < x[b], y[r] < y[g] < y[b] в сумме. Это можно сделать, если отсортируем все точки по x, сожмем координаты по y, потом будем перебирать x[r] и поддерживать сумматор, отвечающий на запрос, сколько точек с координатами l <= y <= r. Если текущая точка (x[r], y[r]), то при c = sum(y[r] + 1, MAXY) к ответу нужно прибавить c * (c — 1) / 2. Далее из сумматора удалить точку y[r] и перейти к следующему x. Вот, а теперь из ответа нужно вычесть кол-во треугольников x[r] < x[g] < x[b], y[r] < y[g] < y[b] — т.е. кол-во 3-инверсий. Это известная задача, можно тем же сумматором посчитать.

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

    500 — сожмем координаты, посортим точки по x. заведем 2 дерева отрезков с суммой, в первое из них положим все точки.

    теперь идем снизу вверх (по x) и поддерживаем наши деревья отрезков так, чтобы в 1м были все точки выше, а вот 2м — все ниже (ну просто "перекладываем" из 1го дерева во 2е). и в процессе считаем 2 величины:

    1. количество "любых" треугольников с углом в красной вершине
      x(r) < x(g) < x(b) && ( y(r) < y(g) < y(b) || y(r) < y(b) < y(g) )
      это T1.get(y_i, n) * (T1.get(y_i, n)-1) / 2;

    2. количество треугольников где точки "на одной прямой"
      x(r) < x(g) < x(b) && y(r) < y(g) < y(b)
      это T2.get(1,y_i) * T1.get(y_i, n)

    ну и в конце просто вычитаем 2е из 1го

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

    Мне кажется, 500 можно решить и без дерева интервалов. Однако я, к сожалению, не успел дописать решение во время соревнования, поэтому, пожалуйста, скажите, если следующие рассуждения неверны.

    Нужно понять, что нам надо посчитать количество всех возможных хороших треугольников, которое равно количеству всех треугольников минус количество плохих. А плохие бывают всего двух видов — когда у трёх точек монотонно увеличиваются сразу две координаты, и когда одна монотонно увеличивается, а другая уменьшается. Первый случай решается с использованием метода динамического программирования за O(N*logN), а второй — аналогично, только с инверсией одной координаты.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится
        o
      o
             o
      

      хороший или плохой?

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

        Хороший.

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

          это в вашем решении он хороший, а по условию задачи — плохой.

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

            Подождите, но ведь это треугольник как раз такого вида, какие нам надо посчитать (если ось X направлена вправо, а Y — вверх), значит хороший, разве нет? Впрочем, я уже понял свою ошибку: бывают плохие ещё и вида типа такого, как Вы нарисовали, только с Y-координатой инвертированной, — а я их не учитываю. Тогда извиняюсь.

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

              если ось X вправо, а Y — верх, то тогда хорошие только такие:

                  о
                    о
              о
              
              • »
                »
                »
                »
                »
                »
                »
                »
                12 лет назад, # ^ |
                  Проголосовать: нравится +5 Проголосовать: не нравится

                Да, да, Вы правы, действительно, и это я тоже проглядел. Что ж, зато теперь не обидно, что немного не успел дописать :-)

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

          Плохой ведь

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

На контесте не дописал решение по 300-ке за O(N4). А можно было (как-нибудь не слишком адово) писать за более быструю асимптотику писать?

P.S. Чужие решения смотреть не хочу до отправки в практис рум.

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

    Многие (в т.ч. я) писали вообще за O(N5). Мне кажется, теоретически можно за куб, если заранее найти все рёбра, по которым возможен переход, но это уже много возни.

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

    Я не знаю решения быстрее, чем за 5ю степень

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +5 Проголосовать: не нравится

      Я не уверен в правильности своего решения, но в нём чистая четвёртая степень.

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

      Когда мы моделируем процесс движения торговца, на каждом шаге приходится искать минимум из всех рёбер. Т.к. перед каждым моделированием менялось лишь одно ребро, то все минимумы можно не пересчитывать, а только один. Получается O(N4). Или я что-то не понимаю?

      UPD: это неправда.

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится +6 Проголосовать: не нравится

        Да, наверное. Но так как ограничение всего 30 я особо не парился

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

        Так ведь надо было искать минимумы не среди всех исходящих ребер, а среди исходящих в непосещенные вершины ребер — а после изменения ребра множество непосещенных вершин будет уже другим?

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

          Да, значит я не прав. Хорошо, не стал пытаться это написать во время раунда.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится

      У меня вроде бы за четвертую. Просто жадно когда решаем куда-то пойти ставим вес ребра. Всего, понятно, n^2 ребер, строим путь за квадрат

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится +5 Проголосовать: не нравится

        Можно чуть подробнее? Куда ставим?

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

          Пишем рекурсивную функцию, которая помечает пройденные вершины, храним флаг — меняли ли уже какое-то ребро или нет.

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

          Если не меняли, опять же можем взять первую неиспользованную вершину, при этом считаем что вес ребра не меняли. Второй вариант: можем поменять вес ребра. Рассмотрим множество непомеченных вершин из текущей, отсорченных по возрастанию весов. Есть три варианта:

          • идем в первую вершину, тогда максимально увеличиваем её вес, чтобы она все ещё была первой в списке (формулка),

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

          • идем в какую-то другую вершину — по любому должны установить вес ребра в вес ребра, идущего в первую вершину списка, +/-1.

          Устанавливаем флаг измененного ребра, запускаем рекурсию

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

      Да, зашло решение за четвертую.

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

Контест куда-то пропал из Active Contests.

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

    Решили сделать вид что контеста не было?)

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

      [:|||||||||||||||||||||||||:], так Длугач троллил в Admin Lobby :)

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

Как отлично — теперь арена еще и падает :)

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

Кто-то может по такому поводу обьяснить как футболки распределяются? Вот из правил выдержка "The Algorithm Competition will award T-shirts to the 350 Competitors with highest Ranks, where a Rank of a competitor is defined as the best taken place out of all Online Rounds of Online Stage 2 in which this Competitor achieved a score greater than zero." Если я правильно понял, то достаточно один раз попасть в топ 350. С другой стороны в чате арены говорят, что даётся всем, кто примерно топ-117 из каждого раунда.

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

    Ну топ117 достанется с гарантией. Увеличится за счет того, что есть люди попавшие туда несоклько раз.

    Берем у каждого лучшее место, какое он занимал, сортим по нему. Первые 350 людей в списке — молодцы.

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

    Для каждого береться лучшее место из раундов 2А, 2В, 2С. По ним делаеться общая таблица и первим 350 дают футболки.

»
12 лет назад, # |
Rev. 3   Проголосовать: нравится +21 Проголосовать: не нравится

По моим подсчётам футболки получают первые 137 в каждом раунде.

3й раунд уже из статистики — проходной порог не изменился.

Скачать .xlsx

Скачать .csv

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится -6 Проголосовать: не нравится

    Спасибо за хорошие новости. Не думал, что 112 места будет достаточно. В этом году как-то не получалось у меня с футболками, я даже второй раунд GCJ умудрился проспать, а тут за один день обеспечил себе футболки RCC и TCO.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +11 Проголосовать: не нравится

      а казалось бы, первые 116 гарантированно получают: 116*3<350