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

Автор Yandex, история, 5 лет назад, По-русски

Всем привет!

Рады сообщить, что очередной Алгоритм пройдет в рамках чемпионата по программированию компании Яндекс — Yandex Cup 2021.

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

Расписание:

  • Пробный тур начнется 20 сентября в 12:00 и закончится 26 сентября в 23:59

  • Квалификационный раунд стартует 27 сентября 2021 года в 12:00, а завершится 3 октября 2021 года в 23:59. Он будет организован как виртуальный контест.

  • Финал состоится 16 октября. Время проведения станет известно позже.В финальный раунд попадут участники квалификационного раунда, которые наберут не меньше пяти баллов.

Если вы уже немного устали решать олимпиадные задачи по программированию, или просто ищете соревновательного разнообразия, то вам, возможно, будет интересно принять участие в других направлениях чемпионата:

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

В каждом направлении предусмотрены денежные призы:

  • 1-е место — 300 000 рублей

  • 2-е место — 250 000 рублей

  • 3-е место — 200 000 рублей

  • 4-е место — 150 000 рублей

  • 5-е место — 100 000 рублей

Также предусмотрены футболки для топ-30 финалистов каждого трека.

Регистрация открыта до конца квалификационного раунда. Подробная информация и регистрация на сайте: yandex.ru/cup/

Отдельная благодарность всей команде разработки и тимлиду направления Chmel_Tolstiy

UPD: Квалификационный раунд начался. В формате двухчасового виртуального соревнования участнику нужно стартовать свою сессию (нужна предварительная регистрация) до 23:59 3 октября (время московское, UTC+3).

UPD2: Кваликиация завершена. Всем спасибо за участие! Дорешивание: https://contest.yandex.ru/contest/29878/enter/

UPD3: Разбор задач квалификации: https://mirror.codeforces.com/blog/entry/95880

UPD4: Алгоритм 2021 завершен! Поздравляем победителей ksun48, Radewoosh and Um_nik. Абсолютным победителем по количеству баллов вне зачёта стал tourist, поздравляем!

Дорешка финала открыта для всех желающих https://contest.yandex.ru/contest/30228/enter/

До встречи на следующих соревнованиях!

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

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

Qualification round is running now. It's two hours virtual contest and contestant should start the participation till 23:59 3rd October (Moscow time, UTC+3).

Please read all problems we think that each quite interesting and some of them has subtasks.

Good luck and get some OK's.

======

Квалификационный раунд начался. В формате двухчасового виртуального соревнования участнику нужно стартовать свою сессию до 23:59 3 октября (время московское, UTC+3).

Мы рекомендуем почитать все задачи, т.к. считаем их достаточно интересными и в некоторые добавили подзадачи для разнообразия.

Удачи и побольше ОК.

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

В связи с чем поставлено ограничение на возраст(18+) для участия в соревновании?

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

    Ограничение связано в первую очередь с юридическими тонкостями выплаты денежных призов. При этом вы можете участвовать вне конкурса и решать задачи.

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

(•‿•) В анонсе было написано, что квалификация будет открыта неделю, как и пробный раунд, и я не обратил внимания, что при открытии contest-а стартует таймер на два часа. Думал, попью кофе, почитаю задачки, а уж вечером после работы буду решать… Гы.

Интересно, я один такой «одарённый»?

Короче, наверное, буду регистрироваться заново… Yandex, меня через это не дисквалифицируют?

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

    Ох, спасибо за обратную связь. Улучшим в этом месте коммуникацию про квалификацию.

    (сделаю вид, что пропустил сообщение в последнем абзаце)

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

Можете открыть дорешивание задач квалов

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

One who is planning to participate in Qualification round should start in next about 36 hours. Good luck and have fun.

======

Желающие поучаствовать в квалификационном раунде должны стартовать в ближайшие 36 часов (на самом деле около того). Удачи и приятно проведите время, решая задачки!

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

Каким образом будет проходить финальный этап (дистанционно с применением прокторинга или дистанционно без прокторинга)?

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

why are there so few T-shirts?)

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

Is it possible to upsolve the problems of qualification round ?

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

Chmel_Tolstiy скажите, пожалуйста, каковы критерии прохода в финал в направлении "Мобильная разработка: Android" и когда будут проверены посылки (До сих пор стоит статус "принято на проверку")

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

    Балы по мобильной разработке уже доступны в ЛК, а также открыта таблица результатов.

    Согласно правилам, мы позовем топ-50 каждого направления.

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

Where can I find how to solve E

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

    Define $$$cnt_i$$$ — size of suffix consisting of only bits $$$1$$$

    One condition in good matrix is $$$cnt_i \ge cnt_ {i-1}$$$ and other bits in row $$$i$$$ consist of bits $$$0$$$, for $$$2 \le i \le n$$$

    Write DP $$$dp_{i,j,k}$$$ — minimum number of swaps if we make suffix $$$i$$$ of rows and suffix $$$j$$$ of columns in row $$$i$$$ consist of $$$1$$$ using $$$k$$$ bits from some positions.

    So transiions:

    • $$$dp[i][j][k]-(!a[i][j]) \Rightarrow dp[i][j + 1][k - 1]$$$

    • $$$dp[i][j][k]+(m - j + 1) - sf[i-1][j] \Rightarrow dp[i - 1][j][k + (m - j + 1)]$$$, where $$$sf_{i, j}$$$ is number of bits $$$1$$$ in row $$$i$$$ on suffix $$$j$$$

    Answer is $$$\min(dp_{i, j, sum})$$$ for all positions $$$(i; j)$$$ and sum bits of matrix $$$sum$$$

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

Final round is on the same day as Kickstart round G, hoping that the timings don't clash.

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

Hope we get an editorial for the problems this year :D

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

Please, open upsolving for backend qualification

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

How to solve problem D Matrix?

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

    Observation: if we fold the matrix along the horizontal axis, all numbers in the same column became equal. For example for the matrix:

    1  2  3  4
    5  6  7  8
    9  10 11 12
    13 14 15 16
    

    After folding

    14 16 18 20
    14 16 18 20
    

    And if we fold along the horizontal axis again (just assuming, this is forbidden in the problem statement for this example), every numbers will be doubled.

    And the same observation hold for the vertical axis. Also if there is a moment that we have already done 2 type of folds, all numbers will be the same.

    The second observation is that we must fold along the bigger side. Suppose that side is $$$m$$$. Then we will have: $$$n \le m$$$, so $$$n \le \sqrt{n \times m} \le \sqrt {2^{30}} = 2^{15}$$$, which is small enough. That means after the first time folding, we actually can just maintain the set of the numbers in every columns. That is, we calculate them, put them into a set. While $$$m \gt n$$$, we double these numbers again and again, put them into the set. And finally we can fold along the other axis and all number will become one. Now is just looping until $$$n = m = 1$$$ and double this number again and again.

    This algorithm works in $$$O(\min(n, m) \log n \log m)$$$

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

    Problem have $$$O(log(n)+log(m))$$$ solution.

    We have some numbers after each fold. We need add count of this numbers to the answer and subtract count of numbers that have already been added since the previous fold. It can be proved that it is necessary to subtract only numbers $$$\le n\cdot m$$$ (numbers that intersect with the original sequence). It can be done in $$$O(1)$$$ with simple math formulas.

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

How to solve problem F?

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

    Let's formalise reversing a path as changing each edge $$$p \rightarrow v$$$ to $$$q \rightarrow v$$$ and vice versa iff $$$v$$$ isn't on the path. Now it's simple casework with some efficient tree stuff.

    • If one of the vertices $$$p,q$$$ coincides with $$$1,N$$$:
      • If the other two also coincide, the path doesn't change. W.l.o.g. now $$$p=1$$$.
      • If $$$q$$$ is on the path at distance $$$d$$$ from $$$1$$$, the length decreases by $$$d$$$ because the $$$q \rightarrow$$$ part of the path is changed to $$$1 \rightarrow$$$.
      • If $$$q$$$ isn't on the path, the length can only change if the edge $$$1 \rightarrow$$$ isn't between $$$1$$$ and $$$q$$$ — the whole path is extended and its length increases by the distance between $$$1$$$ and chosen $$$q$$$.
    • Otherwise, exactly one of the vertices $$$p,q$$$ (w.l.o.g. $$$p$$$) must be inside the path between $$$1,N$$$. If both are inside the path, its length doesn't change; if neither's inside, then all edges of the path don't change.
    • Let's say that we moved from $$$p$$$ towards $$$1$$$, again w.l.o.g., for $$$d_1$$$ edges, left the path before reaching $$$1$$$ and moved further for $$$d_2$$$ edges. Then the length of the path increases by $$$d_2-d_1$$$. (Only if $$$d_2 \gt 0$$$ and $$$d_1 \gt 0$$$, the length doesn't change otherwise.)
    • If we instead reached $$$1$$$ and moved further for $$$d_2$$$ edges, the same rule applies except $$$d_1$$$ is uniquely defined as the distance of $$$1$$$ and $$$p$$$.

    We can bruteforce all cases for one of $$$p,q$$$ coinciding with $$$1,N$$$. Now let's pick the vertex $$$v$$$ (possibly $$$1$$$ or $$$N$$$) where we left the path after moving from $$$p$$$ to $$$q$$$; we know $$$d_1$$$ and just need the sum of distances to all vertices in its (non-path) subtrees, with some multiplier since we have equivalent cases depending on which vertex is on the path and to which one we're moving. $$$O(N)$$$.

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

How to solve problem B?

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

    For mine, each tile can be rotated so for each tile I see the lexicographically minimum representation of it (there might be a better way). Like

    WW

    BB

    can be

    BW

    BW

    if it's rotated, but both tiles can be

    BB

    WW

    which is the lexicographically minimum of them (going clockwise starting at upper left) so I use that to represent the first 2 tiles. I mapped the first 2 tiles to the third tile, and the third tile is mapped to the number of tiles that can be rotated to it.

    Then, for each tile in the picture, I get how many tiles left I have that can be rotated to this tile, and if I run out of tiles that can be put there it's "No".

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

Isn't the next round schedule fixed yet?

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

Auto comment: topic has been updated by Yandex (previous revision, new revision, compare).

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

Will the final be in the same virtual format ? E.g. we will have x hour window to do the contest any time between some fixed start and end date. Since https://clist.by shows that the final round will be 27 hours.

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

А есть ли разбор и дорешка backend квала?

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

    Наврядли разбор есть, думаю если бы было, скинули бы давно. А про дорешку выше спрашивали, до сих пор не ответили. А какие задачи нужны?

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

      Я бы хотел узнать правильное решение А (у меня тонна ифов, написанных часа за два на листочке, что мне очень не нравится) и решение sql задачи — раньше никогда не приходилось сталкиваться с рекурсивными запросами

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

        Я проверил, сейчас квал бэкенда открыт для дорешки. Вот моя А-шка, вроде вышло не так страшно

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

          Да, решение действительно короче, только, к сожалению, оно неправильное — оно не может различить случай a, b, a от случая b, a, b — для обоих случаев ответ сервера будет a, b для 0-1 и для 1-2 переменных

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

        А Sql задачу сам бы с радостью узнал

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

Is there a public live scoreboard of the final round available somewhere?

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

I admit I'm not too good at interactives but what is the point for the 90% winrate for problem B if tests are deterministic? Is it just a joke or does it actually matter for you to rng and hope the grader's heuristic is bad?

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

Is it only me or was the problem statement hard to understand?

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

I don't want to excuse for my performance, but let me leave some complaints to make the contest better.

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

    Thank you for feedback. Sorry, for these issues.

    • will double check it in next time
    • frustrated to make the same mistake twice
    • first time report of such an issue (will double check it)
    • found an error fast and tried to fix it fast, forgot in hurry to send a message

    By the way hope it was quite good contest.

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

B makes me uneasy. You need to have a 90% winrate against what? Some jury solution that's not even guaranteed to be the best?

If the game has no known winning strategy that can be calculated fast enough, then this is just a tossup — you need to make several attempts because your strategy's winrate will depend on the jury's winrate.

If the game has a known winning strategy that can be calculated fast enough, then this formulation is just dumb and confusing. If it's supposed to be a joke, it's just annoying and not very amusing. Though, the problem statement doesn't guarantee that n is chosen uniformly at random, so you can make a test where all games have the same $$$n$$$ for every $$$n$$$, so I guess I was supposed to understand that it is a "troll"?

And then I find out that the first greedy strategy I write is actually correct.

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

    What's "best"? If the grader plays the winning side, of course it can beat you, and if the grader plays the losing side, all moves are losing unless you mess up.

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

      I mean optimal. From the problem statement alone it's not clear that the grader always makes correct choices (it is even called a heuristic and the statement about 90% makes it sound like it might not be).

      A priori, you can't deduce from the statement alone that whether a state is winning or losing is decidable in polynomial time. So it could be possible that you are expected to exploit weaknesses in the jury's algorithm.

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

        But then they wouldn't be able to set the problem if they couldn't decide who was winning in case contestant had a better solution.

        Anyway, from contestant's point of view it doesn't matter too much, just try to solve the problem.

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

I think all the problems except B were really cool, kudos to authors!

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

How will we be contacted according the prizes? My main email in yandex system is something@yandex.com, but I'm not using it at all, I guess that other non-Russian participants too.

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

The problems felt too easy for the finals. I only like problem D because I couldn't solve it.

A — it's trivial what to do; scary implementation
B — fine easy problem
C — trivial with Berlekamp-Massey
D — nice
E — bad convoluted statement; solution is easy if you know that sum over O(smaller child depth) is small
F — ok but why did you allow collinear and coincident points?

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

    Eh, D is pretty much classical "store prefix hashes and prefix reverse hashes", I wouldn't call that very nice.

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

    Ad C. Can you elaborate on that? IIRC Berlekamp-Massey guesses the linear reccurrence from given n points. I am convinced that for a given $$$A$$$ there will be a linear rec. But how to feed it with initial values?

    My solution was like this:

    Let

    $$$g(s) = \text{length of longest unique subsequence of } s$$$

    and

    $$$f(k) = |\{s : g(s) \leq k\}|$$$

    If you have

    $$$f(0),f(1),...,f(|A|)$$$

    you can easily calculate the answer. Let us fix k. To calculate $f(k)$:

    For $$$j=1,2,3,...,k$$$ we define

    $$$g(j, len) = |\{s : |s|=len, s \text{ ends with exactly }j \text{ unique characters, }s \text{ doesn't have a subword of }k+1\text{ unique chars }\}|$$$

    One can write matrix M s.t.

    $$$M \cdot (g[1,len],...,g[k,len]) = (g[1,len+1],...,g[k,len+1])$$$

    Now

    $$$f(k) = \sum_{i, len} g(i, len)$$$

    and this can be easily calculated with matrix exp, if you extend the matrix and the vector to maintain also the sum of everything.

    Also, this got WA, but I am pretty sure that I have a bug in implementation. So if anyone could provide a correct result for 500000000 50, or share a solution, so I can find an input to debug, I would appriciate that.

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

    Can you please share your idea on problem A?

    I was able to solve it with (I think) $$$O(L^2 \cdot n \cdot log(k))$$$ where $$$L \leq 20$$$. Using a trie with a map<int,int> for transitions in each node. It worked in ~1.8 seconds in C++, which seems too close to TL.

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

How to solve task D in final round?

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

Автокомментарий: текст был обновлен пользователем Yandex (предыдущая версия, новая версия, сравнить).

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

Auto comment: topic has been updated by Yandex (previous revision, new revision, compare).

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

I missed the finals because there was no e-mail from Yandex Cup about me qualifying to the finals and/or reminder e-mail before the contest. Actually, the last e-mail I see from the organizers is dated August 7.

Of course, it's my fault that I don't visit clist.by on a daily basis :)

But still, it's quite normal to expect that that finalists have other things to remember other that the date of the finals, and make some effort on notifying us.

Dislike to Yandex Cup for that.

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

Yandex when we can expect backend standings revealed?