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

Автор sdryapko, 13 лет назад, По-русски
Здравствуйте, сегодня в 5:00 по московскому времени начался очередной SRM, предлагаю после окончания соревнования вести его обсуждение здесь.
  • Проголосовать: нравится
  • +26
  • Проголосовать: не нравится

13 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится
у меня лишь одна мысль возникает: "ыыыыыы" :)
13 лет назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится
Наш украинский друг жесток :)
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Задачи точно от него? 

    А то раньше Джон, Брюс и счастливые числа - это была строго его фишка, а сейчас уже начали плагиатить, уже минимум 3 человека на эту тему матчи давали.

    Хотя по стилю - да, задачи от Шефа)

13 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится
После этого матча ненавижу эти числа!
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    посмотрим как ты будешь жить без этих чисел! :)
13 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится
А мне матч понравился... Не помню, когда я в последний раз был 18-м =)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Не знаю как у кого, но у меня что-то был знатый затуп... 250ку больше 15 минут я уже давно не решал...
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Как решалась 500 (div1)?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Не там написал, читайте мой комментарий ниже.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    Жадно. Первый всегда выбирает начало или конец промежутка так, чтобы он отстоял от какого-то числа на bLen-1, а второй всегда выбирает промежуток, начинающийся после, или заканчивающийся до числа. Или по краям. Два перебора 2^11 чисел + БП для нахождения кол-ва чисел в промежутке.
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Я так понимаю, тип long long в возвращаемом методе 250 Div1 сделали чтобы запутать участников?
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
У нас есть список счастливых чисел в данном диапазоне для каждого числа V из списка проверяем два диапазона: [V-bLen+1, V-bLen+jLen] и [V+bLen-jLen, V+bLen-1]. Возвращаем максимум из всех диапазонов (задача John'a). На каждом диапазоне пытаемся минимизировать (задача Bruce'а). Поскольку всего чисел до 2046, а сделать все можно за квадрат - оно работает.
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Отличный матч и интересные задачи! Не понимаю почему так много людей тупило на 250.

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Многие на 250 писали решение которое способно и на более больших ограничениях работать не ТЛясь, хотя в данной задаче можно и более просто решить.
  • 13 лет назад, # ^ |
      Проголосовать: нравится -8 Проголосовать: не нравится

    Наверно потому, что задача интересная и не очень привычная. Многим и в голову не пришло, что чисел будет очень мало, и можно перебирать влоб - значительная часть участников написала динамику построения, которая пашет и для ограничений 10^100, но пишется намного дольше. И баг в ней допустить намного проще.

    А я тупил жестко. Вчера экзамен сдавал, сегодня голова еще туманная, не поспал нормально, тупил жестоко. Сразу понял идею задачи, но потратил кучу времени на реализацию. В результате только 183 место, +6 (приятно хоть не минус... новый 1879).

    Особенно весело было, когда я назвал функцию рекурсивного построения числа try, и долго думал, почему компилятор арены требует от меня какой-то catch)


    • 13 лет назад, # ^ |
        Проголосовать: нравится +2 Проголосовать: не нравится
      Интересно, что у меня в комнате чем выше по рейтингу тем более сложные решения 250 - от рекурсии до ДП
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

        Забавно, что у многих была готовая динамика построения, в которой нужно было только прописать 3 строки переходов и строку или две на работу с флагом "была/не было плохой цифры". 

        Сдать адекватное решение на 240-245 - вполне реально (ты это доказал своими  240.04... если сразу понять, что перебор проходит, то при быстром кодинге набирать надо еще больше). А написать с ноля динамику, которую сдают на примерно такой же балл... Или мне очень-очень далеко до настоящих задротов кодинга, или это довольно трудно.

        Да, и как я мог забыть, поздравляю со счастливым 44 местом в дивизионе!

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

          А зачем так спешыть? Лутше все проверить. Тем боле очень смущал тот long long при возврате.

          P.S. Спасибо!
          • 13 лет назад, # ^ |
            Rev. 2   Проголосовать: нравится -6 Проголосовать: не нравится

            Вот разница между 245 и 240 как раз в этой проверке, ты, видимо, "не спешил". Мне тоже всегда, когда задачу можно сдать довольно быстро, кажется, что надо лишний раз потестировать, так как сейчас прям все сдадут, и после возможного ресабмита у меня будет 0 шансов на хороший результат:(

            Да, и сделай сейчас еще счастливые +47 вклада)

            upd. Новая цель тебе - получить +74)

13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Интересно, сейчас еще дубль темы в англоязычном интерфейсе кто-то создаст? :)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
чоткий срм, хоть и пролетел немного, ну задачи понравились) не подскажете, кстати, как дорешивать?
13 лет назад, # |
  Проголосовать: нравится -6 Проголосовать: не нравится
такой же вопрос
13 лет назад, # |
  Проголосовать: нравится -6 Проголосовать: не нравится
возможно немного не в тему, но: где можно узнать о штрафных баллах, сколько баллов снимается за минуту с каждой задачи, а так же за каждую левую посылку?
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Читай правила на сайте.
    Формула убывания очков нелинейна. За каждую левую посылку снимают 10% очков от текущего результата. За задачу минимум - 30% от изначальной стоимости.
13 лет назад, # |
  Проголосовать: нравится +57 Проголосовать: не нравится
Поздравляю RAD.'a с победой!
13 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
1000 тоже в стиле Васыля - или куча народу сдает, или никто)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
давно я так не тупил, -25
13 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

Решал Div 2 1000.
На тест 854645986252 дает ответ 2, а правильный 1.
Вроде, следующие основания подходят - 213661496563 (число записывается как 4 по этому основанию) и 5 (число записывается как [4, 7, 4, 4, 4, 7, 4, 7, 7, 7, 7, 4, 7, 4, 4, 4, 7]).
Кто может мне помочь?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Если уж на то пошло, то по основанию 213661496563, оно записывается не как 4, а как 40.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
В этом SRM было много синих, которые набрав 0 очков, поднялись в рейтинге :)
  • 13 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

    Да,странно с рейтингом.

    В моей руме было 2-ое синих у кого рейтинг примерно одинковый (1339 и 1349)

    Первый 1 раз неудачно меня отчеленжил (причем кажется из-за того,что я переменную в коде не так назвал :D) и получил -215(!) ,а второй с 0-ем получил  -7:)

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

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

      Формулами это легко объяснить. К тому же они довольно логичные:) Место берется среднее по диапазону равных баллов.

      Следовательно, если 0 баллов, то сегодня это, условно говоря, около 430 места. 

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

      А если -25, то это место в седьмой сотне, и "вас взули почти все, кому не лень".

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

1000 халява по сути, я 500-ку мучал весь контест, а сразу по окончанию по дороге на работу придумал решение. надо просто сгенерить все счастливые числа, а потом три циферки перебирать и решать квдадратное уравнение (разруливать случай a = 0), ну еще пробежаться по всем базам до 10^6 влоб, всё что подходит кидаем в сет, его размер ответ. Кстати у меня +47 за матч, забавно :)
13 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Вопрос скорее по теории:)

В общем, все знают, что если много нолей и низкий рейтинг, то можно словить + и с нолем.

Так вот, ниже 3 пользователя из тех, кто сегодня написал на 0, их старый рейтинг и изменение после матча:

         4ndypanda 1312 +4

         jayi 1306 0

        liquid_amber 1306 -3

От чего такая разница? Согласно формулам, место для всех, у кого 0, берется одно и то же (середина диапазона нулей).

Следовательно, на знак изменения рейтинга влияет только 1 вещь - expected rank.

Для jayi я бы еще мог предположить, что он не в минусах, потому что weight меньше получился, и его минус "очень маленький".

Но по поводу того, что более высокий рейтинг получил +, а более низкий -... Что получается, из за разницы volatility у одного получился  expected rank ниже его места, а у другого выше (ведь у одного +, у другого -, а actual rank у них одинаковый).

Это можно как-то красиво объяснить влиянием  volatility и общего распределения результатов в дивизионе, или не судьба? 

Кстати, пока думал над этим вопросом, немного порылся в теории, узнал о такой вещи, как error function (которая прямо используется при вычислениях  expected rank), раньше даже не обращал внимания, что она есть в формуле, забавная штука:) А мне казалось, что там берут минимум из реального значения и единицы:) Может, что-то связанное с ней?


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

    Тут свою роль сыграл показатель volatility:

       4ndypanda 237  1312 (+4)
       jayi 360  1306 ( 0 )
       liquid_amber 385  1306 (-3)

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

    Таким образом, от liquid_amber ожидали чуть большего, чем от jayi. А volatility у 4ndypanda настолько меньше других, что от него ожидали более низкого места даже при немного большем рейтинге.

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

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

      Посчитал, что у меня шанс обогнать Петю почти 2 из 10000000, но если поднять мне нестабильность от 294 до 500, то шанс вырастает сразу более чем в 1000 раз, до 2 из 10000:) 

      Спасибо за объяснение причин этого "парадокса".

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

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

        Получается так.

        Топовым "игрокам" выгодна большая нестабильность, т.к. для них она понижает ожидаемое место.

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
How to solve the problem 500 (Div 2) ?
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    1 . pre calculate the amount of lucky numbers on segment [0,N]. (you can do this using dp approach). Code will look like this
    int cnt[4747+1] = {0};
    for(int x = 1; x <= 4747; ++x) cnt[x] = cnt[x-1] + isLucky(x);

    2.  in order to obtain the amount of lucky numbers on arbitrary segment you can use cnt array. number of lucky numbers on segment[M,N] equals to cnt[N] - cnt[N-1].

    3. to solve problem just simulate the game

    int ans = 0;

    for(int aa = a; aa + jLen - 1 <= b; ++aa) 
        { 
            int brus = bLen; 

            for(int bb = aa; bb + bLen - 1<= aa + jLen - 1; ++bb) 
            { 
                    brus = min(brus, cnt[bb + bLen - 1] - cnt[bb-1] ); 
            } 

            ans = max(ans, brus); 
        } 

    return ans;
13 лет назад, # |
Rev. 2   Проголосовать: нравится -9 Проголосовать: не нравится

Ночью от далать нефиг решил через мемоизэйшн Heavy Number из раздела Educational Discussion на топкодере. С утра перед матчем проснулся и решил, что не выспался, лёг дальше досыпать. А сейчас открыл прошедший тур и вижу, что первая задача чуть ли не упрощённый вариант только что решенной, мог бы её переделать вообще на напрягаясь минут за двадцать.