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

417A - Отбор. Автор и реализация Aksenov239.

Сначала нужно заметить, что если k больше либо равно, чем n·m, то ответ — 0. Нам осталось набрать n·m - k человек. Есть три способа их набрать:

  • Взять раунды только первого типа: .
  • Взять чуть раундов второго типа до числа, делящегося на n: .
  • Взять только раунды второго типа: d(n·m - k).

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

Код: 6396283

417B - Сбой. Автор и реализация Aksenov239.

Заведём массив a на 105 элементов, изначально заполненный  - 1, и в ячейке с номером k будем хранить максимальный номер посылки k-го участника, который сейчас есть. Будем обрабатывать посылки последовательно. Пусть обрабатывается посылка x k. Если a[k] < x - 1, то очевидно, что ответ NO, иначе обновляем массив — a[k] = max(a[k], x).

Код: 6396297

418A - Футбол. Автор и реализация Aksenov239.

Представим турнир себе как граф. Из каждой вершины ровно k выходящих рёбер. Тогда всего nk рёбер. В полном графе максимум рёбер, поэтому если n < 2k + 1, тогда ответ  - 1. Иначе, соединим i-ую вершину с i + 1, ..., i + k, зациклим если нужно.

Код: 6396331

418B - Хитрый Гена. Автор и реализация Aksenov239.

Давайте отсортируем друзей по возрастанию требуемого количества мониторов. Будем считать динамику на масках — какое минимальное число денег нужно заплатить, чтобы решить такие-то задачи, если мы взяли первых i друзей. Тогда ответ надо сравнить с ответом для i первых друзей плюс количество мониторов, которое требует i-ый друг. Не трудно заметить, что если брать друзей последовательно, то пересчитывать динамику можно как рюкзак. Время работы данного алгоритма O(nlog(n) + n2m).

Код pashka: 6396347

418C - Квадратная таблица. Автор и реализация Aksenov239.

Давайте для любого n построим массив длины n, что сумма квадратов чисел на нём является квадратом:

  • Если n = 1, то берём [1].
  • Если n = 2, то берём [3, 4].
  • Если n чётно, то берём .
  • Если n нечётно, то берём .

Нам дано 2 числа n и m. Пусть массив a соответствует числу n, а b соответствует числу m.

Тогда итоговый массив c построим следующим способом — cij = ai·bj.

Код: 6396358

418D - Большие проблемы организаторов. Автор chavit, реализация Aksenov239.

В данной задаче есть два решения.

Первое. Подвесим за какую-нибудь вершину. Предподсчитаем для каждой, 3 самые удалённые вершины в её поддереве, а также для каждой вершины её глубину. Также предподсчитаем массивы для двоичного подъёма. Для каждой вершины i и степени двойки 2j предподсчитаем следующие массивы — p[i][j], up[i][j] и down[i][j]. p[i][j] — это предок вершины i на расстоянии 2j. В up[i][j] будет храниться наидлиннейший путь из i, до вершин, которые находятся в поддереве вершин, которые находятся на пути между i и p[i][j]. down[i][j] отличается от up[i][j], что хранит путь из вершины p[i][j].

Теперь осталось дело за малым. Нам приходит запрос u v, мы ищем его наименьшего общего предка — w. Осталось найти вершину hu, которая будет находиться на середине это пути. Обрезать дерево по этой вершине, и посчитать длиннейшее расстояние от вершины u в её дереве и длиннейшее расстояние от вершины v в её дереве. Представляя на дереве это, если мы не будем удалять, то можно воспользовавшись нашими предподсчитанными массивами аккуратно пересчитать значение длиннейшего пути.

Решение за O(nlog(n)).

Код: 6396376

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

Код cerealguy: 6396390

418E - Хитрый пароль. Авторы enot110, Aksenov239, реализация Aksenov239

Ключевая теоретическая идея данной задачи заключается в том, что 2 строка совпадает с 4, 3 с 5 и т. д. Поэтому нам нужно уметь менять что-то только на первых трёх строках.

Теперь дело остаётся за практической частью. В первую очередь сожмём все значения, чтобы они не превосходили 105. Разобьём массив на отрезки длиной LEN. На каждом отрезке будем считать следующее — для каждого значения будем хранить сколько раз он встречался на префиксе cnt, а так же дерево Фенвика, в котором в ячейке f[k] будет храниться количество чисел на данном префиксе, встречающихся ровно k раз. Несложно заметить, что в первом массиве хранится ответ на запросы ко второй строке, а чтобы получить ответ для третьей строки, нужно посчитать f[cnt[k]... 105]. Понятно так же, как делать пересчёт данной динамики.

Итого, получаем время на запрос за . Если мы возьмём , то время ответа на запрос составит .

Код: 6396412

Разбор задач RCC 2014 Warmup (Div. 2)
Разбор задач RCC 2014 Warmup (Div. 1)
  • Проголосовать: нравится
  • +37
  • Проголосовать: не нравится

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

Дайте пожалуйста права на просмотр кода.

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

Если на Java писать, то ограничения времени жестковатое.

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

Можно пояснить, для чего сортировать друзей по требуемому количеству мониторов в див2D?

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

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

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

Можно разбор задачи E поподробнее пожалуйста? Интуитивно очень непонятная задача. И еще там в формулах где-то явно есть баг — видимо, в сумме лишний множитель написан.

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

    Прошу прощения. В формуле действительно есть ошибка. Какой шаг точнее повторить? Теоретический ясен?

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

      Начиная с момента "На каждом отрезке будем считать следующее".

      Еще уточни, пожалуйста, терминологию.

      Например, тут "встречался на префиксе cnt" cnt вроде как индекс префикса, а тут "нужно посчитать f[cnt[k]... 10^5]" уже вроде массив. Ну и кстати почему надо суммировать на таком отрезке?

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

        Да. cnt[k] — сколько число k встречается раз на префиксе. cnt[k] — это на самом деле число, которое стоит во второй строке. Тогда какое количество чисел во второй строке имеют тоже самое значение, что и cnt[k]. А оно именно равно количеству чисел с cnt[k], cnt[k]+1 и так далее. А так как максимальное количество встреч равно 105, то от этого и такой массив.

        Я понятнее объяснил, надеюсь.

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

...

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

    Можете отформатировать тест? Мне не очень понятно. Но судя по тому, что я вижу — ответ YES.

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

      Уже разобрался, извините, неправильно понял условие

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

Мое решение Е с асимптотикой

Будем называть число большим если оно встречается более Раз и маленьким в противном случае. Будем хранить для каждого большого числа дерево Фенвика с поддержкой запроса "сколько раз даннный элемент встречается на данном префиксе". Кроме того будем хранить Деревьев Фенвика отвечающих на вопрос сколько различных маленьких чисел встречается на префиксе не менее k раз

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

Запрос для четных строк делается втупую, для нечетных — одним запросом в соответствующее дерево Фенвика и сравнением с каждым большим числом

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

Nice editorial very good english!!

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

the problems in this contest are all very interesting.

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

В задаче div1.C про квадратную таблицу для тех, у кого нет такой математической интуиции, чтобы придумывать пример суммы n квадратов, дающих квадрат, есть другой способ. Можно обойтись простой динамикой: для каждого x от 0 до 10 000 и для каждого k от 0 до 100 вычислим can[k][x] — можно ли представить x в виде суммы k квадратов чисел, не превосходящих 100. Это очень просто пишется (6390336). После этого оказывается, например, что 10 000 можно представить в виде суммы любого количества квадратов от 1 до 100.

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

    Надо сказать, что чтобы искать ответ в виде ci, j = ai·bj тоже нужна некоторая интуицая, с которой мне вчера не повезло. Пришлось вгонять перебор ответов вида

    aaaabb
    aaaabb
    ccccdd
    ccccdd
    ccccdd
    

    Вогналось даже на контесте: 6393584. И, да, два ифа в начале существенны, иначе не работает на каких-то тестах :)

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

      Перед тем, как написать что-нибудь подобное, я всегда смотрю на это:

      и начинаю искать более простое решение)

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

        Я тоже так делаю. Не помогло. А сдавать надо.

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

          Мне кажется, тебе надо было решать D, больше толку было бы =) Хотя бы из тех соображений, что ты потренировался бы решать задачи, а так ты потренировался пропихивать какой-то отстой) Да и место могло быть получше.

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

        Я вот тоже смотрел на сабмит по D на 9й минуте и искал простое решение...

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

          Э, ну надо же смотреть не на произвольные сабмиты, а на Генины) Ну или, по крайней мере, человека, который очень редко лажает.

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

      Ровно такое же решение сдал (даже константа 30 совпала). А каким образом оно не работает на этих тестах (для которых костыли)? Убрал их — что-то выводит.

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

        Там не работает на каких-то конкретных, в стиле 42x83 и <что-то-еще>x62. Я просто на всех тестах запустил и подкостылил, где падало.

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

How to solve div1C ??

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

    Here's the trick: if an integer p can be written as the sum of the square of n integers, then p2 can also be written as the sum of the square of n integers. For example, if

    p = a12 + a22 + a32, 

    then

    p2 = (a12 + a22 + a32)2 = (a12 + a22 - a32)2 + (2a1a3)2 + (2a2a3)2.

    Generally, if

    p = a12 + a22 + ... + an2, 

    then

    p2 = (a12 + ... + an - 12 - an2)2 + (2a1an)2 + ... + (2an - 1an)2.

    So for an array of length $n$, how to make the sum of the square of its elements be a square of an integer? We can simply set a1 = ... = an = 1, and the array becomes {n - 2, 2, 2, ..., 2}. Then you can apply this method to generate the matrix.

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

      yeah, from author's opinion, what we do is to generate n or m postive integers that the sum of their squares is also a square number.

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

В 418C - Квадратная таблица можно обобщить последовательности таким образом:

  • Если n нечётное, то берём .
  • Если n чётное, то берём .
  • При малых n берём только n самых правых элементов из соответствующей последовательности.
»
10 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

How to solve div1-D? We have computed p, down and up, what next?

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

Problem Div1 E has a solution with complexity , just need to maintain two arrays sum1[n/Len][N], sum2[n/Len][N], where sum1[i][j] is the number of j in the first i*Len positions of row 1, and sum2[i][j] is the number of j in the first i*Len positions of row 2.

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

Can anybody please give bit more explanation about 418B — Cunning Gena? Thanks in advance

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

    Consider we have dp[msk][last] = amount of min money spent on solving problems chosen on msk with hire maximum first last friends. (msk is bitmask of chosen problems)

    Then suppose we want to hire the (last + 1)'s friend which cost is dp[msk][last] + cost[last + 1]. If this amount less than dp[msk|solve[last + 1]][last + 1], update it.

    The answer is minimum of dp[allproblems][k] for all (1<=k<=N) plus cost of monitors required.

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

Strange explanation to problem div1 C. Do this, you will get accepted. No explanation , no proof, why this works. there is a comment regarding this problem but that's not also enough. seems like pure math :( . this is "Code"-forces not "math"-forces. Authors should send these kinds of problem in IMOs, not here.

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

    I think that enough information is given to understand the solution. You have to think a little, but it is a nice thing to do.

    For the first part, you can manually verify that the sum of the given values squared is a square. For the second part, note that if a12 + a22 + ... + an2 is a square, then (k·a1)2 + (k·a2)2 + ... + (k·an)2 is also a square.

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

    Explanation of the idea how to make such arrays is simple. If you take first n - 1 nubmers such that the sum of their squares is odd, you should suppose it equals to some 2t + 1 and make last element equal to t. Then sum of all squares will be 2n + 1 + n2 = (n + 1)2.

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

      thanks a lot for explaining!
      P.S. i think editorial should have this idea too, not just the answer!

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

        Thanks, now its clear to me. and I agree with JuanMata , the editorial should have this idea too, not just the answer!

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

Div1-D, second solution: "Let's find the diameter of the tree. (...) Then on the query we find two distant vertices on this diameter and the path. Obviously, diameter should contain the middle of the path," There are two possibilites: 1. I don't understand what author meant. 2. This is not true. One thing is for sure — I don't understand second sentence — what are "two distant vertices" ?? Which path is third sentence about? Obviously diameter doesn't have to contain middle of every path, so I guess author meant something else.

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

    I think he meant "every maximal path goes through at least one node in the diameter".

    It's not hard to see that a path that does not go through the diameter at least once cannot be maximal, because otherwise there would be a path bigger than the diameter.

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

In 417 A-Elimination, You've said: if k ≤ n·m, then the answer is equal to 0. I think it's: if n·m ≤ k, then the answer is equal to 0.

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

I just can't understand what 'realization' means...

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

54416306 why tle n^2 complexity should work according to constrains given in the problem 417C/418A

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

54416306 why tle I think n^2 complexity should work for problem 417C/418A according to constrains given

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

I just wanna know the name of the fucker who is putting tags in the problem and putted dp 1500 tag in problem A (Elimination).

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

Could anyone explain me problem A. Very poor statements.