Ух, какие насыщенные выходные! Я надеюсь, что у всех участников есть еще море сил и энтузиазма для новых задач и решений.
Отборочный этап Яндекс.Алгоритма 2014 начнется через чуть более чем 8 часов. Раунд 1 продлится 100 минут и будет доступен для прошедших в отборочный этап участников по этой ссылке. Участники, занявшие места с 1 по 30 получат зачетные очки в соответствии с системой ГП-30. Именно по количеству зачетных очков в отборочном этапе будет определяться состав финалистов турнира.
Удачи!
То есть если хочется поспать, то возникает некоторый шанс не пройти, потому что не хватит баллов, набранных в последующих двух раундах?
Конечно, некоторый риск появляется. Раунды начинаются со сдвигом в 8 часов, так что каждому участнику один раунд окажется неудобен (если не перелетать с места на место, конечно ;) )
А это идея...
Кэп намекает, что менять часовой пояс можно и не переезжая.
У большинства участников даже в случае написания всех раундов — некоторый шанс не пройти дает о себе знать)
Но ты спи, спи, здоровье важнее:)
ИМХО в поясах UTC +6 и +7 все раунды можно с натяжкой назвать удобными :).
UPD. Ну и кривые же у меня руки...
В UTC -7 тоже, только раунд 3 в 2 часа ночи немного печалит :)
Вот же ж. В Е сначала испугался, а потом не успел послать полный перебор всех пятерок чисел, а оно зашло через пять минут в дорешку. Надо уже научиться правильно ТЛ оценивать как-нибудь.
А почему вообще это работает?
Т.е. как доказать оценку "5 чисел достаточно", не используя метод сабмита?)
5 чисел достаточно проверять. 6 чисел гарантированно достаточно, ибо иначе можно использовать просто степени двойки и двоичное представление чисел.
Да, точно. Сам уже догадался, узнав что оценка существует.. :)
Я вот сдал перебор, только не умею доказывать, что он работает быстро.
Перебор пятерок чисел? Почему пятерок?
шести и так гарантированно достаточно — 1, 2, 4, 8, 16, 32 могут дать в сумме любое число до 63.
Как по-нормальному решать С?
Я доказал, что достаточно составить четырёхугольник, у которого не все стороны будут равны (и тогда его можно превратить в невыпуклый, возможно, переставив стороны). А затем поверил, что если сторон больше 4 (или их ровно 4, но они не все равны), и самая большая сторона меньше суммы всех остальных, то это всегда можно сделать. Не прокатило.
"наибольший возможный периметр невыпуклого четырёхугольника, который может быть построен с использованием четырёх палочек из заданного набора"
Я правильно понял, что ты иногда пытался использовать больше четырех палочек?
Да, я невнимательно прочитал формат вывода, спасибо =(
Вообще, это, конечно, ненаказуемо, но по-моему, неправильно, когда невозможно понять условие правильно, не прочитав формат вывода.
Мне гораздо больше не нравится, когда невозможно понять условие правильно, не прочитав "легенду". :)
Конечно, хорошо бы перечислять все важные факты и в легенде, и формате ввода/вывода. Но если факт упоминается только в одном месте из двух, то гораздо проще его пропустить именно в "легенде".
Даже если их больше 4, то они не должны быть равны. Т.е. "5 5 5 5 5 5" должно давать ответ -1.
Отсортируем по возрастанию длины отрезков. Рассмотрим индексы отрезков в ответе, 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 найдем бинарным.
Хм. А почему нельзя точно также двигать k к l? После этого можно перебирать только четверки i, i + 1, i + 2, i + 3. Надо только проверить, чтобы квадрат не получился.
k к l нельзя двигать, т.к. это может испортить i + j + k > l
Достаточно отсортировать и перебирать только четверки i,i+1,i+2,i+3, без каких-либо бинарных поисков. Второе условие выполняется автоматически; если первое не выполняется — оно не будет выполнено и после уменьшения какого-то из первых 3 индексов. Остается только смотреть, не равны ли все 4 стороны между собою.
Почему это нельзя? Это условие как и не может испортиться.
"Тогда это четырехугольник, если i + j + k > l, невыпуклый если i + j < k + l". Как это доказать эти 2 свойства?
Четырехугольник, это если возьмем самый длинный отрезок, и с помощью трех других сможем достроить, т.е. это как условие a + b > c для треугольников или любого замкнутого контура (большая сторона замкнутого контура не больше суммы всех остальных).
Спасибо. =) А 2 ое свойство как?
Не знаю как сформулировать, вроде очевидно)
Это лучшее док-во. А как всё таки интуитивно доказать? =)
Если i + j < k + l, то можно построить треугольник со сторонами k, l, (i + j). Сторона с длиной (i + j) состоит из двух отрезков. Можно стороны длиной k и l "сложить" ближе друг к другу на малый угол, а точку сочленения на стороне (i + j) придется подвинуть на малое расстояние вовнутрь или наружу. Если подвинем вовнутрь, то получится невыпуклый 4-хугольник. Интуитивно, так как треугольник был невырожденный, то всегда будет возможно вышеописанное :)
Как решать B?
Объединить уток в группы с одинаковой тональностью и отсортировать по возрастанию тональности. После этого динамика, учитывающая факт, что к одной тональности невыгодно приводить 4 и больше групп.
Вот она, решаем динамикой "сколько рассмотрели-был ли использован последний".
У меня зашло "прикинуть что если отсортировать уток, то дальше чем на 5 (это на всякий случай с запасом, а так вроде 2) позиций утку смещать не надо". Дальше дп в лоб на минимальную сумму префикса.
да, тож интересно. почему неверно следующее? посортим массив, оставим каждое число в одном экземпляре, а дальше будем делить этот массив на куски длиной 2 или 3.
Еще можно кусок длины 1. А в остальном правильно.
мда. я почему-то подумал, что все само учтется и не обновлял dp[i + 1] значением dp[i]!
Вот такой вроде антитест, если я правильно понял Вас:
1 2 2 8 8 9
Ответ — 2.
ВАшное решение говорит 2
Значит всё-таки неправильно понял :)
Тогда так: 2 2 4 4. Ответ — 0.
да 0!)))
Всё, я окончательно не понимаю, что значит "оставим каждое число в одном экземпляре", давайте код :)
Попробую и я сыграть в экстрасенса.
1 2 2 3 3 4
Должно быть 2.
да ответ 2! вот решение не работает, например, здесь: 1 2 3 100 100
закоменченно правильное дополнение до АС)
А еще можно кусок длины 1, если в оригинальном массиве это число было больше одного раза.
Зашла следующая динамика:
Массив mas (тональность уток) посорчен по убыванию. Смотрим, если текущая утка идет вверх к предшественнице, то следующая точно пойдет вниз + возьмем динамику для i+3. Если текущая утка пойдет вниз к следующей, то следующая точно не смещается и берем динамику i+2.
В анонсах, которые публикуются заранее и висят довольно долго, довольно забавно выглядят фразы вида
и без указания точного времени старта. В результате надо либо бежать на сайт смотреть расписание, либо высчитывать на основании времени публикации. Не говоря уже, что просто легко не обратить внимание на время публикации и подумать "еще не скоро, целых 8 часов!"
Мне очень нравится экран обратного отсчета, который появляется, если зайти на страницу соревнования до его начала. Поэтому я ожидала, что именно там участники будут узнавать актуальную информацию о том, скоро ли начнется раунд. Но я впредь буду сопровождать анонсы прямой ссылкой на TaD, спасибо за отзыв =)
А зачем заставлять участников логиниться для приобщения к прекрасному? :)
Раз никому не интересно, то спрошу сам: как решать F?
Если k < n, то ответ k-ый по минимальности элемент (нумерация с 0) Если k >= n, то за m=(k — (n — 1)) операций нам нужно составить максимальное число, а за (n-1) операций распространить его на другие сервера. Чтобы найти максимальное число, перебираем пару соседних серверов. К минимальному прибавляем максимальный и так m раз. Делаем это обычным возведением матрицы в степень, чтобы работало быстро :) Но сравнивать полученные значения по заданному модулю конечно же нельзя. Поэтому для сравнение будем тоже прибавлять минимальный к максимальному, но min(m,50) раз и считать не по модулю, тогда это влезет в 64-битовое целое.
Ну или можно просто взять пару, для которой max + min / phi максимально. Считать это просто в long double. phi — золотое сечение.
Почему это работает? Если m маленькое — множитель при min будет отличаться от 1.0/phi довольно сильно, разве нет?
Если массив имеет вид 900 100 0 501 500, и у нас только одна операция для получения максимума, то нужно взять 501 500, хотя оценка с золотым сечением выше у 900 100.
Ну да, да, это для маленьких не работает. Можно в начале написать бинпоиск до 10^18, а если оно сойдется к правой границе, то уже числа будут достаточно большими, чтобы золотое сечение работало.
Можно просто вычислить коэффициент:
Так как m -- небольшое то можно вычислить его за O(m) в даблах:
How to solve E ?
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.
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.
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).
For C, you mean a <= b <= c <= d and a!=d right?
Yes, you're absolutely right. Edited.
Why have I got -8?? I thought I had taken an initiative.
Okay. Moral : Dont run after the votes.
But I had not done it for votes. only problem is that my current contribution is -1 :\
Согласно моим подсчетам можно поздравить pperm и eatmore с выходом на онсайт
У меня было какое-то странное явление, которое заключается в том что таймер отсчета показывал, что осталось чуть больше минуты до конца, но когда последний раз бросил взгляд на код и отправил его(ну максимум 10 сек прошло) — появилось объявление, что соревнование уже законченно. Такое вообще может быть или 5 утра дают о себе знать?
Невыспавшийся Юра это грустно. Не надо так .-.
Сдавал всё втёмную. В первой подумал что сумму можно брать в любом порядке, в третьей не догадался про квадрат, в шестой ошибку пока не могу найти.
Кто-нибудь, поясните шестую!
P.S. взял немножко не то Phi :)
In Gym: 2014 Yandex.Algorithm - Elimination Stage, Online Round 1
===
Добавил тренировку: 2014 Yandex.Algorithm - Elimination Stage, Online Round 1
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.
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.
How to solve F?
That's exactly what I want to ask!!! BTW, Here's a short editorial for A-E in Chinese if anyone is interested. CLICK