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

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

Привет! FYI, первый квал RCC начинается меньше, чем через час. Я не смог найти анонса этому контесту на КФе, так что будем считать, что он здесь.

Удачи!

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

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

How to solve D faster than , where n = 5 * 105?

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

    I didn't submit it during the contest, not sure if it would fit the TL, but an O(n*sqrt(n)) solution would be to maintain an array of answers for all k; initially it can be built in O(n*sqrt(n)), then updated in O(#divisors(T[v])) for each query of type 1 and 2.

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

    It may be solved in O(n * sqrt(MAX) + m * numberofdivisors(MAX)) where n = m = 1e5

    Maintain all answers, changes are O(divisors), queries are O(1), precalc is O(n * sqrt(MAX)): for each problem you have O(sqrt(MAX)) ranges to add fixed value. It may be done offline without log

    PS: had to spend much time to fit in TL anyway:(

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

How to solve B?

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

Has anyone solved C faster than O(n * maxdivisor * logn)?

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

    Well, I don't know an actual complexity of my solution, but I couldn't come up with a test to make it work at least observably long.

    (Copy-Paste from another thread on CF):

    Magical solution for C. Divide all numbers by their common GCD. Now it's easy to see that the answer is no less than 1 and we should check if it's at least 2, and if yes, find it. Let's calculate the following "DP": iterate over numbers, when passing the i-th number keep set of pairs (a, b) where a and b is the pair of gcd values we can achieve by splitting first i numbers into two sets. When passing the number x, we take each pair (a, b) and form two new pairs (gcd(a, x), b) and (a, gcd(b, x)).

    It is now working in , but we make a super-observation that we are not interested in pairs where one of the numbers is equal to 1 since we already know that the answer is not less than 1, they provide no information for us. Do not add such pairs and it gets AC. I have no single idea WTH it works. Maybe because I sorted all numbers in increasing order and uniqued them?

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

    I also don't know the complexity of my solution. I came to idea that first element in any case will be in one of two group. So we can go through all of his divisor and iterate though other elements if element also has this divisor we put him in one group with first, else we put him in another group and keep the gcd. This solution got TL

    I decrease the time, using one if. if current gcd of second group is smaller than our current maximum we break;

    Here is my code

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

А где теперь посмотреть вердикт посылки, которая не успела дотеститься во время раунда?

И вообще у меня по E так и пишет -1, хотя я сдал её во второй раз. Решения до сих пор тестируются или эти посылки просто забыли учесть? Всё-таки просто долго тестилось. Но вердикт всё ещё интересен =)

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

Is it possible to upsolve the problems?

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

Solution for this round Tutorial

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

Я в C получил AC, но я не перебирал все делители. Вместо этого, я поделил все числа на их общий gcd, после чего перебирал только простые делители минимального. Может кто-нибудь доказать или опровергнуть это решение?

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

    4
    6 14 21 7

    видимо. Если разбить как 6 и все остальное, то получается 6, а если пытаться 2 или 3, то получится 2 или 3.

    UPD. Видмо 7 тут совершенно ни к чему. Первых 3 чисел хватит.

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

      Ага, говно вместо тестов.

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

      Кто-нибудь вообще по ней wa получил?

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

        зато по ТЛю половину участников свалили ¯\_(ツ)_/¯

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

          Да у меня тоже правильное решение ТЛнулось. Я посмотрел архивчик с тестами и авторскими решениями, у меня код строка в строку повторяет two-subsets_dp2.cpp. Плохо, кароч. НЕКАЧЕСТВЕННО.

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

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

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

              У него правильные решения ТЛ-ятся :)

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

Can someone pls make a training for it here? :)

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