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

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

Ух, какие насыщенные выходные! Я надеюсь, что у всех участников есть еще море сил и энтузиазма для новых задач и решений.

Отборочный этап Яндекс.Алгоритма 2014 начнется через чуть более чем 8 часов. Раунд 1 продлится 100 минут и будет доступен для прошедших в отборочный этап участников по этой ссылке. Участники, занявшие места с 1 по 30 получат зачетные очки в соответствии с системой ГП-30. Именно по количеству зачетных очков в отборочном этапе будет определяться состав финалистов турнира.

Удачи!

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

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

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

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

    Конечно, некоторый риск появляется. Раунды начинаются со сдвигом в 8 часов, так что каждому участнику один раунд окажется неудобен (если не перелетать с места на место, конечно ;) )

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

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

    У большинства участников даже в случае написания всех раундов — некоторый шанс не пройти дает о себе знать)

    Но ты спи, спи, здоровье важнее:)

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

каждому участнику один раунд окажется неудобен

ИМХО в поясах UTC +6 и +7 все раунды можно с натяжкой назвать удобными :).

UPD. Ну и кривые же у меня руки...

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

    В UTC -7 тоже, только раунд 3 в 2 часа ночи немного печалит :)

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

Вот же ж. В Е сначала испугался, а потом не успел послать полный перебор всех пятерок чисел, а оно зашло через пять минут в дорешку. Надо уже научиться правильно ТЛ оценивать как-нибудь.

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

    А почему вообще это работает?

    Т.е. как доказать оценку "5 чисел достаточно", не используя метод сабмита?)

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

      5 чисел достаточно проверять. 6 чисел гарантированно достаточно, ибо иначе можно использовать просто степени двойки и двоичное представление чисел.

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

        Да, точно. Сам уже догадался, узнав что оценка существует.. :)

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

    Я вот сдал перебор, только не умею доказывать, что он работает быстро.

    Перебор пятерок чисел? Почему пятерок?

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

      шести и так гарантированно достаточно — 1, 2, 4, 8, 16, 32 могут дать в сумме любое число до 63.

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

Как по-нормальному решать С?

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

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

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

    Я правильно понял, что ты иногда пытался использовать больше четырех палочек?

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

      Да, я невнимательно прочитал формат вывода, спасибо =(

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

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

        Мне гораздо больше не нравится, когда невозможно понять условие правильно, не прочитав "легенду". :)

        Конечно, хорошо бы перечислять все важные факты и в легенде, и формате ввода/вывода. Но если факт упоминается только в одном месте из двух, то гораздо проще его пропустить именно в "легенде".

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

    что если сторон больше 4

    Даже если их больше 4, то они не должны быть равны. Т.е. "5 5 5 5 5 5" должно давать ответ -1.

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

    Отсортируем по возрастанию длины отрезков. Рассмотрим индексы отрезков в ответе, i, j, k, l. i<j<k<l; Тогда это четырехугольник, если i + j + k > l, невыпуклый если i + j < k + l, второе выполнено автоматически, т.к. они по возрастанию. Теперь пусть i + 1 != j, тогда можем подвинуть i к j, периметр увеличится, оба свойства останутся выполненными (первое, второе автоматом, далее про него забудем). Очевидно, так же двигаем и j к k, т.е. надо задать два индекса i и l, тогда два других это i + 1 и i+2, i переберем, l найдем бинарным.

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

      Хм. А почему нельзя точно также двигать k к l? После этого можно перебирать только четверки i, i + 1, i + 2, i + 3. Надо только проверить, чтобы квадрат не получился.

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

        k к l нельзя двигать, т.к. это может испортить i + j + k > l

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

          Достаточно отсортировать и перебирать только четверки i,i+1,i+2,i+3, без каких-либо бинарных поисков. Второе условие выполняется автоматически; если первое не выполняется — оно не будет выполнено и после уменьшения какого-то из первых 3 индексов. Остается только смотреть, не равны ли все 4 стороны между собою.

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

          Почему это нельзя? Это условие как и не может испортиться.

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

      "Тогда это четырехугольник, если i + j + k > l, невыпуклый если i + j < k + l". Как это доказать эти 2 свойства?

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

        Четырехугольник, это если возьмем самый длинный отрезок, и с помощью трех других сможем достроить, т.е. это как условие a + b > c для треугольников или любого замкнутого контура (большая сторона замкнутого контура не больше суммы всех остальных).

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

          Спасибо. =) А 2 ое свойство как?

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

            Не знаю как сформулировать, вроде очевидно)

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

              Это лучшее док-во. А как всё таки интуитивно доказать? =)

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

                Если i + j < k + l, то можно построить треугольник со сторонами k, l, (i + j). Сторона с длиной (i + j) состоит из двух отрезков. Можно стороны длиной k и l "сложить" ближе друг к другу на малый угол, а точку сочленения на стороне (i + j) придется подвинуть на малое расстояние вовнутрь или наружу. Если подвинем вовнутрь, то получится невыпуклый 4-хугольник. Интуитивно, так как треугольник был невырожденный, то всегда будет возможно вышеописанное :)

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

Как решать B?

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

    Объединить уток в группы с одинаковой тональностью и отсортировать по возрастанию тональности. После этого динамика, учитывающая факт, что к одной тональности невыгодно приводить 4 и больше групп.

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

    Вот она, решаем динамикой "сколько рассмотрели-был ли использован последний".

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

    У меня зашло "прикинуть что если отсортировать уток, то дальше чем на 5 (это на всякий случай с запасом, а так вроде 2) позиций утку смещать не надо". Дальше дп в лоб на минимальную сумму префикса.

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

    да, тож интересно. почему неверно следующее? посортим массив, оставим каждое число в одном экземпляре, а дальше будем делить этот массив на куски длиной 2 или 3.

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

      Еще можно кусок длины 1. А в остальном правильно.

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

        мда. я почему-то подумал, что все само учтется и не обновлял dp[i + 1] значением dp[i]!

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

      Вот такой вроде антитест, если я правильно понял Вас:

      1 2 2 8 8 9

      Ответ — 2.

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

        ВАшное решение говорит 2

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

          Значит всё-таки неправильно понял :)

          Тогда так: 2 2 4 4. Ответ — 0.

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

            да 0!)))

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

              Всё, я окончательно не понимаю, что значит "оставим каждое число в одном экземпляре", давайте код :)

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

              Попробую и я сыграть в экстрасенса.

              1 2 2 3 3 4

              Должно быть 2.

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

                да ответ 2! вот решение не работает, например, здесь: 1 2 3 100 100

                закоменченно правильное дополнение до АС)

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

      А еще можно кусок длины 1, если в оригинальном массиве это число было больше одного раза.

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

    Зашла следующая динамика:

    	dp[n - 2] = dp[n - 1] = mas[n - 2] - mas[n - 1];
    	for (i = n - 3; i > 1; i--)
    	{
    		dp[i] = min(mas[i - 1] - mas[i] + mas[i + 1] - mas[i + 2] + dp[i + 3],
                                mas[i] - mas[i + 1] + dp[i + 2]);
    	}
    	printf("%lld", dp[2] + mas[0] - mas[1]);
    

    Массив mas (тональность уток) посорчен по убыванию. Смотрим, если текущая утка идет вверх к предшественнице, то следующая точно пойдет вниз + возьмем динамику для i+3. Если текущая утка пойдет вниз к следующей, то следующая точно не смещается и берем динамику i+2.

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

В анонсах, которые публикуются заранее и висят довольно долго, довольно забавно выглядят фразы вида

начнется через чуть более чем 8 часов

и без указания точного времени старта. В результате надо либо бежать на сайт смотреть расписание, либо высчитывать на основании времени публикации. Не говоря уже, что просто легко не обратить внимание на время публикации и подумать "еще не скоро, целых 8 часов!"

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

    Мне очень нравится экран обратного отсчета, который появляется, если зайти на страницу соревнования до его начала. Поэтому я ожидала, что именно там участники будут узнавать актуальную информацию о том, скоро ли начнется раунд. Но я впредь буду сопровождать анонсы прямой ссылкой на TaD, спасибо за отзыв =)

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

      Мне очень нравится экран обратного отсчета, который появляется, если зайти на страницу соревнования до его начала.

      А зачем заставлять участников логиниться для приобщения к прекрасному? :)

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

Раз никому не интересно, то спрошу сам: как решать F?

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

    Если k < n, то ответ k-ый по минимальности элемент (нумерация с 0) Если k >= n, то за m=(k — (n — 1)) операций нам нужно составить максимальное число, а за (n-1) операций распространить его на другие сервера. Чтобы найти максимальное число, перебираем пару соседних серверов. К минимальному прибавляем максимальный и так m раз. Делаем это обычным возведением матрицы в степень, чтобы работало быстро :) Но сравнивать полученные значения по заданному модулю конечно же нельзя. Поэтому для сравнение будем тоже прибавлять минимальный к максимальному, но min(m,50) раз и считать не по модулю, тогда это влезет в 64-битовое целое.

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

      Ну или можно просто взять пару, для которой max + min / phi максимально. Считать это просто в long double. phi — золотое сечение.

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

        Почему это работает? Если m маленькое — множитель при min будет отличаться от 1.0/phi довольно сильно, разве нет?

        Если массив имеет вид 900 100 0 501 500, и у нас только одна операция для получения максимума, то нужно взять 501 500, хотя оценка с золотым сечением выше у 900 100.

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

          Ну да, да, это для маленьких не работает. Можно в начале написать бинпоиск до 10^18, а если оно сойдется к правой границе, то уже числа будут достаточно большими, чтобы золотое сечение работало.

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

          Можно просто вычислить коэффициент:

          q = Fib[m - 1] / Fib[m]
          

          Так как m -- небольшое то можно вычислить его за O(m) в даблах:

          t[0] = 0;
          t[1] = 1;
          t[i] = 1 + 1/t[i - 1];
          
          // t[m] стремится к phi с ростом m.
          
          q = 1/t[m];
          
»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

How to solve E ?

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

    Answer is always <=6 (because we can make every number in range 1..63 using values of 1,2,4,8,16,32), so you may set answer to 6 and try to improve it searching over all possible smaller sets of numbers in range 1..50.

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

Let us all contribute to write an editorial for each problem.

I start with problem A.

It is simple brute force time taken 3 ms memory 380 kb.

Make a recursive function which processes ith inpu. calculate new-sum based on current sum and current index. Then permute the digits of newsum and pass it as current sum with i+1 as current index.

My solution link.

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

    B: Sort the ducks according to initial tone, then do DP trying to group two or three adjacent ducks and force them to have same tone. It doesn't make sense to make larger groups as they'll all be formed anyway, i.e. a group of 4 can be no better than 2 pairs.

    C: Four sides a <= b <= c <= d can form a concave polygon if a+b+c>d and a != d. Sort the lengths and try all groups of 4 consecutive lengths.

    D: You don't need to keep track of the actual values of both Wojtek and Tomek, just the current xor between the two values. Then do DP with state (current element, current xor).

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

    Why have I got -8?? I thought I had taken an initiative.

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

      Okay. Moral : Dont run after the votes.

      But I had not done it for votes. only problem is that my current contribution is -1 :\

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

Согласно моим подсчетам можно поздравить pperm и eatmore с выходом на онсайт

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

У меня было какое-то странное явление, которое заключается в том что таймер отсчета показывал, что осталось чуть больше минуты до конца, но когда последний раз бросил взгляд на код и отправил его(ну максимум 10 сек прошло) — появилось объявление, что соревнование уже законченно. Такое вообще может быть или 5 утра дают о себе знать?

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

Сдавал всё втёмную. В первой подумал что сумму можно брать в любом порядке, в третьей не догадался про квадрат, в шестой ошибку пока не могу найти.

Кто-нибудь, поясните шестую!

P.S. взял немножко не то Phi :)

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

    Why can't we see the accepted solutions for the Yandex Rounds in the gym? Making them viewable could be beneficial to all, I think.

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

      Disclaimer: though right now I'm a Yandex employee, I'm not a member of the organizing commitee.

      AFAIK, to do so, Yandex must ask a permission from all the participants to publish their solutions, otherwise such publishment will be a violation of the law about personal data.

      Well, it'd be possible to write in the rules that a participant grants Yandex such a permission, but it hasn't been done and now it can't be changed. That's all.

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

How to solve F?