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

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

Подскажите где можно отрешать финалы прошлых лет, желательно как виртуальные контесты? Вот например на яндекс тренировках есть, но не все и пароль с опенкапа не подходит:
06008. World Finals - 1998.
06010. World Finals - 2000.
06011. World Finals - 2001.
...
06017. World Finals - 2007.

Полный текст и комментарии »

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

Автор aropan, 13 лет назад, По-русски
Можно было перебирать каждую позицию и проверять подходит ли она под условия a ≤  i - 1 и n - i ≤ b (для i от 1 до n). Первое условие можно преобразовать в a + 1 ≤ i, а условие n - i ≤ b в n - b ≤ i, тогда общее условие можно записать max(a + 1, n - b) ≤ i и тогда наш ответ можно вычислить по формуле n - max(a + 1, n - b) + 1.
Авторское решение

Пробуем всеми возможными способами переставить цифры в числах и для каждой перестановки проверяем разницу между максимальным и минимальным числом.
Авторское решение

Все позиции кроме первой и тех, чей номер простое число большее |s| / 2 должны иметь одинаковый символ. Оставшиеся же позиции могут быть любыми. Как это показать: рассмотрим позиции, которые должны совпадать для p = 2 это 2,4,6,8... теперь возьмем позицию с номером x ≤ |s| / 2, эта позиция должна иметь тот же символ что и на позиции 2, так как символ x должен быть равен символу на позиции 2 * x, который в свою очередь равен символу на позиции 2. Теперь рассмотрим позиции, чей номер больше чем |s| / 2. Если эта позиция имеет номер не простое число значит есть простое число p на которое делится номер нашей позиции и p ≤ |s| / 2. Символ в позиции p равен символу в позиции 2, так как p ≤ |s| / 2 значит и символ в нашей позиции также соответствует символу в позиции 2. Оставшиеся же позиции не объединяются ни с какими другими позициями поэтому символ который стоит в них ни на что не влияет.
Найдем символ который встречается максимальное количество раз и пробуем этот символ расставить на позиции символы в которых должны быть равны. Если этого символа на все позиции не хватает тогда ответ "NO", иначе оставшиеся символы расставляем как угодно на остальные позиции.
Авторское решение

Повернем поле на 45o преобразовав координаты клетки (x, y) в (x + y, x - y). Тогда клетка (x, y) будет плохой, если будет выполняться одно из условий x ≡ 0 (mod 2a) или y ≡ 0 (mod 2b). Т.е. неплохие клетки будут разбиты на сектора вертикальными и горизонтальными прямыми. Для каждого сектора можно определить его координаты парой чисел, первое число которое будет увеличиваться при переходе в соседний правый сектор, а второе число пары будет увеличиваться при переходе в соседний верхний сектор. Из сектора с координатами (x, y) можно перейти в любой соседний по стороне сектор, посетив минимум 1 плохую клетку, т.е. в (x - 1, y), (x + 1, y), (x, y - 1) и (x, y + 1). Так как числа 2a и 2b имеют одинаковую четность, то из сектора (x, y) также можно перейти в сектор по диагонали, посетив также 1 плохую клетку, т.е. в (x - 1, y + 1), (x + 1, y - 1), (x - 1, y - 1) и (x + 1, y + 1). Тогда получается что минимальное количество плохие клеток, которые должны быть посещены по пути из сектора (x1, y1) в сектор (x2, y2) будет равно max(|x1 - x2|, |y1 - y2|).
Преобразуем координаты начальной и конечной клеток по вышеописанному правилу. Потом найдем в каких секторах находятся наши клетки и вычислим ответ по вышеописанной формуле.
Авторское решение

Для начало сведем задачу к одномерной матрицы. Рассмотрим монотонный путь (1, 1), (1, 2), ..., (1, m - 1), (1, m), (2, m), ..., (n - 1, m), (n, m) по которому получается правильная скобочная последовательность. Теперь в этом пути можно заменить клетку (1, m) на (2, m - 1) и по прежнему путь будет монотонным и будет образовывать правильную скобочную последовательность. Значит в клетках (1, m) и (2, m - 1) стоит скобка одного типа. Продолжая так дальше ( например заменить (1, m - 1) на (2, m - 2) или (2, m) на (3, m - 1)) можно увидеть, что в клетках (i, j) и (i - 1, j + 1) стоит скобка одного типа. Тогда у нас получается не двумерный массив n × m, а одномерный размером n + m - 1. Для каждой позиции можно определить какой у неё наибольший приоритет, т.е. для клетки i (1 ≤ i ≤ n + m - 1) приоритет будет равен минимальному значению px, y где 1 ≤ x ≤ n, 1 ≤ y ≤ m и x + y - 1 = i.
Теперь перебираем позиции, начиная с наиболее приоритетных. Ставим в эту позицию скобку "(" и считаем сколькими способами можно доставить оставшиеся скобки, чтобы получалась правильная скобочная последовательность. Если количество способов не меньше k, тогда оставляем в этой позиции скобку "(", иначе уменьшаем k на количество способов и ставим в эту позицию скобку ")". И так проходим по всем позициям. Для того чтобы посчитать количество способов каждый раз просчитывается динамика по двум параметрам fi, j, где i количество обработанных позиций, а j количество открытых скобок. Если на позиции i + 1 скобка ещё не определена тогда можно перейти в fi + 1, j + 1 или  fi + 1, j - 1, если же определена тогда только в fi + 1, j + 1 или только fi + 1, j - 1 в зависимости открывающаяся или закрывающаяся скобка соответственно.
Авторское решение

Отсортируем все суффиксы строки (обозначим как массив строк ci). Тогда ответ на задачу будет количество таких 1 ≤ i ≤ j ≤ |s| и 1 ≤ k, что префиксы длины k у всех строк сi..j равны. Варианты когда i = j и 1 ≤ k ≤ |ci| можно просчитать сразу, это равно количеству подстрок в строке, т.е. |s| * (|s| + 1) / 2. Теперь посчитаем LCP (самый длинный общий префикс) для соседних суффиксов, т.е. ai = LCP(ci, ci + 1) для 1 ≤ i < |s|. Тогда теперь надо посчитать количество таких 1 ≤ i ≤ j < |s| и 1 ≤ k, что k ≤ min(ai..j). Эта задача на подсчет количества прямоугольников, если есть ограничение на высоту в каждом столбце, т.е. ai максимальная высота прямоугольника в столбце i. Решается при помощи стека или списка.
Авторское решение

Рассмотрим чему равно матожидание для фиксированного входа и выхода. Понятно что из входа в выход будет существовать всего лишь один путь, который в любом случае будет пройден. Также ещё можно пойти в неправильном направлении. Рассмотри случай когда выбрана вершина, из которой есть k ложных путей и один верный (он есть всегда). Тогда перед тем как пойти в верном направлении возможно 2k равновероятных способов обхода ложных путей. Каждый ложный путь входить в 2k - 1 способов и увеличивает количество ходов на 2 ×  < размер ложного поддерева >  т.е. матожидание от ложного пути увеличиться на 2 ×  < размер ложного поддерева >  × 2k - 1 / 2k =  < размер ложного поддерева > . Тогда матожидание в вершине равно сумме  < размеров ложных поддеревьев >  + 1 (это ход в верном направлении) +  матожидание от вершины в которую пойдем, идя в верном направлении. В итоге получается, что матожидание равно количеству достижимых ребер из входа, не проходя через выход.
Запустим обход в глубину и каждую вершину рассматривать как вершину выхода. Тогда если в каком-то поддереве определяется вход, то матожидание равно размеру этого поддерева. Просчитываем сколько в каждом поддереве будет количество входов и вычисляем количество ходов, если выход находится в текущей вершине. Также надо не забыть просчитать случаи когда текущая вершина является выходом, а вход расположен выше по обходу дерева.
Авторское решение

Полный текст и комментарии »

Разбор задач Codeforces Beta Round 92 (Div. 1 Only)
Разбор задач Codeforces Beta Round 92 (Div. 2 Only)
  • Проголосовать: нравится
  • +13
  • Проголосовать: не нравится

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

Всем трям!

Вот наконец таки и я автор. Хочу сказать огромнейшее спасибо Артему Рахову [RAD] (благодаря ему вы поймете мои условия) и Марию Белову [Delinur] (тех кто знает мой уровень английского поймут насколько огромно моё спасибо). Также спасибо штабу кодфорсес за чудесную систему на которой все крутится (хотя правда полигон меня пугал по началу))). И также спасибо Сергею Тарасову [Seryi] и Андрею Ткаченко [Tkach1024] за генерацию идей и тестирование (и не надо волноваться что они синии - главное что люди хорошие).

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

Сегодня разбивка по баллам будет немного отличаться от стандартной - для второго дивизиона 500-1000-2000-2000-2500 и 1000-1000-1500-2000-2500 для первого.

И ещё одна, но точно приятная, новость - теперь регистрация заканчивается ровно в момент начала раунда.

Разбор задач.


Как все было.
В 19:35 по Московскому времени Egor сообщил, что у нас в 123B - Клетки в претестах ошибка (за что ему отдельное спасибо). И действительно, мной (и двумя другими проверочными решениями) не был рассмотрен частный случай (a = 1, b != 1 и симметричный ему). Было решено исключить тесты, подпадающие под этой случай. Таких тестов было очень много в претестах (все кроме одного). Генератор тестов был исправлен, и все тесты по задаче изменились. Потом был сделан реджадж. В связи с изменением претестов, некоторые посылки, получавшие WA, могли получить AC и наоборот.

Что есть сейчас.
Мы считаем, что раунд должен быть рейтинговым. Но если ситуация с задачей 123B - Клетки сильно на вас повлияла, вы можете подать апелляцию с доказательствами этого в виде личного сообщению RAD’у до 23:00 4 ноября. Мы можем либо сделать этот раунд нерейтинговым для вас, либо убрать лишние посылки.
После конца системного тестирования рейтинг обновится. Если вы не подаете апелляцию, то это - ваш итоговый рейтинг.

Всем пострадавшим приносим свои извинения.

Полный текст и комментарии »

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

Автор aropan, 13 лет назад, По-русски
Будет ли сегодня проводиться тренировка?

Полный текст и комментарии »

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

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

Предлагаю делать отдельные ветки обсуждений для каждой тренировки...


Problems of September 28, 2011 Contest.
Team standings of today's contest.
Personal standings of today's contest.

Полный текст и комментарии »

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

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

Рад вам представить автоматически обновляемый (каждый час) список соревнований с различных ресурсов clist.x10.mx. Смотрим, критикуем, предлагаем.... и пользуемся)

Полный текст и комментарии »

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

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

Сегодня случайно узнал что QIP Infium 9044 поддерживает bbCode.

Полный текст и комментарии »

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

Автор aropan, 13 лет назад, перевод, По-русски
  • Проголосовать: нравится
  • +37
  • Проголосовать: не нравится

Автор aropan, 14 лет назад, По-русски
  • Проголосовать: нравится
  • +23
  • Проголосовать: не нравится