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

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

Всем привет!

2 мая в 11-00 МСК в системе Яндекс.Контест для команд-участников Открытого Кубка состоится "зеркало" XX Чемпионата Урала. Контест не является этапом опенкапа, зато победитель получит куда больше, чем какие-то рейтинговые очки — кубок интернет-чемпиона Урала :) Среди авторов контеста — winger, Kurpilyansky, Stigius, Erop, AlexFetisov и куча других Уральских (и не только) ветеранов. Спасибо GlebsHP, TeaPot и SirShokoladina за ценные советы и прорешивание комплекта, а также MikeMirzayanov за систему Polygon, которая позволила подготовить комплект большой распределенной по всему свету команде :)

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

Лайк, шэр, репост, все дела :)

UPD

Ссылка на вход: https://official.contest.yandex.ru/contest/2486/enter/

UPD2

BREAKING NEWS! Если у вас нет опенкаповского логина, но вы все же очень хотите получить наш кубок, вы можете зарегистрироваться тут: https://contest.yandex.ru/contest/2486

UPD3 Не опенкаповские команды на контест должны попадать по ссылке выше, опенкаповские — по https://official.contest.yandex.ru/contest/2486/enter/

Statements: https://www.dropbox.com/s/nrdu4jaqamqnjdp/chu-statements-en.pdf?dl=0 https://www.dropbox.com/s/xg18wiej9xm8yqw/chu-statements-ru.pdf?dl=0

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

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

Кубок интернет-чемпиона существует только в интернете? Или отправите почтой России?)

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

    Кубок существует в реальности, будет отправлен как-то (по итогу контеста решим, как).

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

почему не провести его на Codeforces, зачем Яндекс контест?

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

    Изначально планировался опенкап, но в силу некоторых причин опенкап не случился. Систему проведения "зеркала" не поменяли, можно сказать по привычке.

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

    Потому-что на Codeforces и так проводилось много разнообразных чемпионатов,от них все уже сильно устали. Хотя да, на КФе было бы гораздо лучше.

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

Will the contest be standard ICPC format? (5 hours and teams of 3 people)

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

Where can I find the link to the mirror contest?

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

А как именно писать на Яндекс контесте? Я сейчас туда зашел никаких упоминаний ЧУ? Будет секретная ссылка как обычно? И под каким логином туда заходить (опенкаповским)?

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

    Добавили ссылку в пост. Контест заливался вчера-сегодня.

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

По первой ссылке нет условий: ни PDF, ни HTML.

По второй тоже.

UPD: комментарий, полученный от члена жюри: бл***.

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

The problem statements of mirror contest are not available.

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

Дайте условия почитать, а то на яндекс контесте Internal server error.

(Почему не на тимусе? Зачем все усложняете? Какая-то возня с опенкаповскими и неопенкаповскими логинами, условия недоступны, что дальше?)

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

Statements are available by the link above the submit form.

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

What is the solution of G?

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

    My solution is O(nx3). It is obvious, that we should start by solving tasks, that will add 0 to utility. Only after that we will start solving other ones. The order doesn't matter for the first part and for the second part we should solve the one with higher a. Now, let's just iterate over the debt X after first part and calculate the best result with DP[i][j][k] — best utility that we can get by solving tasks starting with i, so that we reduce debt for the first part to j and to k for the second part having the debt after the first part exactly X.

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

      I'm not sure that I understand you correctly. The set of tasks that add zero utility may change while you start taking them. Consider the following test:


      a1 = 5, b1 = 100 a2 = 10, b2 = 110 x = 100 order [1,2] -> 5 + 25 = 30 order [2,1] -> 20 + 15 = 35 (better) x = 105 order [1,2] -> 0 + 20 = 20 order [2,1] -> 15 + 10 = 25 (better) x = 110 order [1,2] -> 0 + 15 = 15 (same) order [2,1] -> 10 + 5 = 15 (same) x = 115 order [1,2] -> 0 + 10 = 10 (better) order [2,1] -> 5 + 0 = 5

      For x = 105 taking the task with zero utility add will not be optimal. Does your program proceed all these tests correctly? Those tests failed all solutions we tried. (Yes, those numbers violate the constraints, you can just divide all numbers by 5).

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

        Yes, it works on these tests. They are not hard actually.

        The main idea is that after you decide what the debt Y will be after you pick all with zero utility, the first and second part become nearly independent. What is left to do is to partition all tasks into these two sets such, that debt after processing the first one will reduce from X exactly Y and the sum of utility after processing second one with initial debt Y is maximal. That is what we need DP for. On each step we decide whether we solve the task in first part (it must have zero utility then) or in the second.

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

          This solution can be improved to work O(nx). You should go in order of increasing of a[i] and count dynamics d[i][j] — utility that we lose, where i — number of problems we go through, j — debt we get after solving problems of first type (that we solve with 0 actual utility).

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

Как решать F,H?

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

    F: по каждому циклу отдельно, там внутри вполне очевидный Фурье. Не забыть хранить "свёрнутые" Q-шки по разным длинам, их там не так много, а лишний N^2 получить не хочется.

    H: Подвесим дерево. Для каждой вершины вычислим сколько раз 1-ая технология встречается по пути от корня до неё, пусть это F(X). Научимся находить кол-во первой технологии на пути от неких A до B: пусть общий предок C и его родитель D, тогда кол-во первой технологии будет f(A) + f(B)-f(C)-f(D). Получается нам нужны пути у которых это выражение равно единице. Обобщаем на M технологий: для каждой технологии берём некое случайное hash(X), и в каждой вершине храним суммы этой функций по всем технологиям встречающимся от корня. Нам нужен путь у которого выражение будет равно сумме всех этих случайных значений. Его можно найти динамикой по поддеревьям с слиянием меньшего множества к большему.

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

      Не забыть хранить "свёрнутые" Q-шки по разным длинам, их там не так много, а лишний N^2 получить не хочется.

      Можно подробнее?

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

        Набор циклов одной длины l надо обрабатывать за раз. Если отметить все колонки, которые соответствуют какому-то циклу этой длины, можно увидеть, что обработка этих колонок сводится к циклической свертке чисел, лежащих на этом цикле, с последовательностю ql, элементы которой получаются суммированием позиций в q, дающих одинаковый остаток по модулю l. Различных длин циклов не более , построить ql по q можно за O(m), поэтому построение всех ql займет время .

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

Thanks a lot to authors for the problem I!!! I love to write very stupid solution for the geometry problem, then iterate over all possible epsilons and finally rewrite the solution to BigDecimals to get AC.

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

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

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

А вот если в комплекте будет задача, которая гроб для одной команды и средняя для другой, то исход предрешён. И это хорошо с точки зрения отбора самой сильной.

Как с таким быть? Стараться, чтоб не было “резких ступенек” между соседними задачами. Иначе те, кто повиснут на этой ступеньке и те, кто её перешагнут и повиснут за ней неотличимы. Если без ступенек не обойтись, то их нужно сделать пониже (скажем, на 2 задачи ниже, чем выход в следующий этап или медали). Т.е. если у вас медали от n задач, то лучше, чтоб ступенька была между n — 1 и n — 2.

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

    Хоть бы ссылку дал :) Не все же знают, кого ты цитируешь.

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

      Троллинг удался, но ведь всё по делу. Провалили вы подготовку набора задач. Для команд, которые будут бороться за медали ACM ICPC 2016 очень даже хороший выдался набор. Для большинства оставшихся команд — четыре задачи и плохое настроение за последние 2-3 часа контеста.

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

Кто-то знает как решать К?

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

    Заметим, что вероятность выигрыша Саши, при условии что мы знаем всего его карты и выбранный им цвет color, зависит только от количества карт цвета 0 и цвета color у него в руке. Чтобы посчитать эту вероятность, нужно перебрать количество карт цвета 0 и цвета color среди открытых y верхних карт колоды и просуммировать вероятности тех событий, при которых Саша выиграет.

    Чтобы решить задачу, нужно перебрать количество карт цвета 0 в руке Саши, затем перебрать выбранный цвет color и количество карт этого цвета у Саши. Теперь осталось набрать остальные карты в руку Саши, при этом рука должна быть такой, что зафиксированный цвет color был и правда самым выгодным для Саши. По уже зафиксированной информации мы можем легко понять сколько максимально карт каждого цвета может быть у Саши (вероятность выигрыша по этому цвета должна быть меньше, чем вероятность выигрыша по цвету color). С помощью ДП (а-ля рюкзак) можно посчитать вероятность зафиксированного события.

    Замечания:

    • итоговая асимптотика O(n4), где n -- общее количество карт в колоде;
    • понятно, что для сравнения вероятностей недостаточно считать по модулю 109 + 7;
    • вероятности выигрыша могут быть одинаковыми — договоримся, что Саша выбирает минимальный по номеру цвет и исправим решение;
    • вероятности выигрыша могут отличаться меньше чем на 1e-12 (или даже еще меньше) — либо считать абсолютно точно в рациональных числах с длинной арифметикой, либо считать в double и при сравнении на равенство проверить равенство по модулю 109 + 7
    • у жюри есть решение на джаве с длинной арифметики; кстати, оно работает быстро и укладывается в TL.
    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      У меня такое же решение, сравниваю вероятности в double, но ВА на 6-ом тесте. Что может быть?

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

        С каким eps сравниваются вероятности? В моем правильном решении с 1e-6.

        UPD. А чего меня минусуют?

        Я про сравнение вероятностей на равенство. Так как к сравнению даблов дополнительно проверяется равенство соотвествующих вероятностей по модулю 109 + 7, то сравнение с большим eps — это норм. А вот если сравнивать с маленьким eps, то можно случайно ошибиться и решить, что одинаковые вероятности неравны.

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

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

      что, если значения в даблах близки, а по молулю 10^9+7 значения различны – как узнать, какая из вероятностей больше? опять в даблах?

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

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

        Может быть, тесты и оказались слабыми. Но раз существует точное решение, укладывающееся в TL, я решил, что существование недоказанного даблового решения вполне допустимо для данной задачи. Все равно эту задачу на онсайте никто даже не отсабмитил, а в интернет-туре сабмитило две команды. Кстати, спасибо tourist за AC по этой задаче :)

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

А задачи чемпионата выложат на тимусе?

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

    Да. Но недели через две-три — программный комитет разъехался в отпуска, а там есть некоторая работа по вёрстка html для тимуса.

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

      Jesus Online Judge (см. первую версию родительского комментария)

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

Я прошел по ссылке на вход из поста, теперь не могу выйти; дайте пожалуйста ссылку на выход

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

Solution of F:
Note than if x and y and consecutive Fibonacci numbers, than y2 - xy - x2 =  ± 1. Proof:

So we can find at most four candidates for the answer. (Using discrete logarithm for taking square root easily passes).
For each y, we want to check if there is such n that

We can use baby-step-giant-step again (here we using that period of fibonacci numbers is at most linear in p).

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

Когда Тимус поднимется?

мы скучаем

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

How to solve B Memory leaks(xn = (xn−1 + xn−2) mod p,(p is a prime),for a y,to find k (xk=y) or say k doesn't exist)?

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

    This is how I solved.
    F(0) = 0; F(1) = 1; F(n) = F(n — 2) + F(n — 1). Then matrix 2x2:

    F(n — 1) F(n)
    F(n) F(n+1)

    is n-power of matrix:

    0 1
    1 1

    There is property: det(AB) = det(A)*det(B), if A and B — same size square matrixes.
    det([0 1; 1 1]) = -1 => det(([0 1; 1 1])^n) = (-1)^n => F(n)*F(n) — F(n — 1)*F(n+1) = (-1)^n
    We are given p and x. If x = F(n) the we need find F(n + 1) = F(n — 1) + F(n). Assume F(n) = x. Then we've got modular equation:

    a*(a+x) — x*x = (+/-)1 (mod p)
    a*a + a*x = x*x (+/-) 1 (mod p) | *4
    4*a*a + 4*a*x = 4*x*x (+/-) 4 (mod p) | +x^2
    4*a*a + 4*a*x + x^2 = 5*x^2 (+/-) 4 (mod p)
    (2*a+x)^2 = 5*x^2 (+/-) 4 (mod p)

    Now we need find sqrt(A) mod p. This is standart algorithm. This. O(sqrt(p)*log(sqrt(p))).

    This is how we find at most four values for a. Then we need to check whether matrix
    [a x; x (x + a) mod p] power of [0 1; 1 1] mod p. This is standart algorithm too (This. Brute-force says power can be at most 2*p. O(sqrt(p)*log(sqrt(p))).

    So we found all values of a.

    P.S. There are two corner cases: p = 2; p = 5. (Both algorithms works on odd prime p. For p = 5 power can be at most 4*p).
    P.P.S. There is more easy way?

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

Any hints or solution for H?

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

Any hints or solution for H?