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

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

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

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

Удачи!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +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 найдем бинарным.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как решать B?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        • »
          »
          »
          »
          »
          12 лет назад, скрыть # ^ |
          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];
          
»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

How to solve E ?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +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.

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

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

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

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

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

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

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

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

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится
  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится -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.

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится -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.

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

How to solve F?