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

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

278B - Новая задача

Количество различных строк длины 2: 262 = 676, а суммарная длина всех строк не превосходит 600. Это значит, что длина ответа не превосходит 2. Поэтому можно просто проверить все строки длины 1 и 2.

277A - Изучение языков

Построим двудольный граф с n вершинами (для сотрудников) в одной доле, и m вершинами (для языков) в другой. Если сотрудник знает язык, значит должно быть ребро между соответствующими вершинами. Теперь задача выглядит понятнее: нужно добавить в граф минимальное количество ребер, чтобы появилась компонента связности, содержащая всех n сотрудников. Очевидно, что это число равно количеству компонент связности, включающих хотя бы одного сотрудника, минус 1. Но есть одно исключение (претест #4): если изначально вообще никто не знает ни один язык, то ответ равен n, так как мы не можем добавлять ребра напрямую между людьми.

277B - Множество точек

Для m = 3, n = 5 и m = 3, n = 6 решения не существует.

Научимся строить ответ для n = 2m, где m ≥ 5 и нечетное. Расставим m точек на окружности достаточно большого радиуса — это будет внутренний многоугольник. Чтобы получить внешний многоугольник, умножим все координаты внутреннего на 2. Более точно (1 ≤ i ≤ m):

Если m четное, построим решение для m + 1 и удалим по одной точке из каждого многоугольника. Если n < 2m, удалим 2m - n точек из внутреннего многоугольника.

К сожалению, такое решение не работает для m = 4, n = 7 и m = 4, n = 8.

Альтернативное решение — поставить m точек на выпуклой функции (например, y = x2 + 107), и n - m точек на вогнутой функции (например, y =  - x2 - 107). Так решал rng_583210150.

277C - Игра

Заметим, что горизонтальные и вертикальные разрезы независимы. Рассмотрим любую горизонтальную линию: она содержит m единичных отрезков, и в любой ситуации всегда возможно уменьшить длину неразрезанной части так, как этого хочет игрок. Представим, что игрок наращивает отрезок от края поля, увеличивая его длину на 1 за раз. Каждый раз суммарная длина неразрезанной части уменьшается либо на 0, либо на 1. В конце, понятно, достигает 0.

То же самое верно и для вертикальных линий. Значит, если бы не было начальных разрезов, игра превратилась бы в ним с n - 1 кучками по m камней и m - 1 кучками по n камней. Решается простой формулой.

Начальные k разрезов добавляют только техническую сложность. Для каждой вертикальной/горизонтальной линии, содержащей хотя бы один разрез, размер соответствующей кучки нужно уменьшить на суммарную длину всех разрезов на этой линии.

Как делать первый ход в ниме: пусть res — результат игры, а ai — размер i-ой кучки. Тогда результат игры без i-ой кучки — . Мы хотим заменить ai на какое-то x, чтобы . Понятно, что единственное подходящее значение . Итоговое решение: находим такую кучку, что , и уменьшаем ai до .

277D - Google Code Jam

Пусть зафиксирован набор подзадач, которые мы будем решать. Давайте определим, в каком порядке их нужно решать. Понятно, что легкие подзадачи (и сложные подзадачи с probFail = 0) в любом случае не упадут. То есть наше штрафное время не меньше времени отправки последней такой <<надежной>> подзадачи. Значит, в первую очередь нужно решить все такие подзадачи. Подзадачи с probFail = 1 вообще не имеет смысла решать. Рассмотрим подзадачи с 0 < probFail < 1. Пусть есть две подзадачи i и j, которые мы решаем подряд. Посмотрим, в каком случае выгодно их решать в порядке i, j, а не наоборот. Мы не учитываем остальные задачи, так как они ни на что не влияют.

(timeLargei + timeLargej)(1 - probFailj) + timeLargei(1 - probFaili)probFailj < (timeLargei + timeLargej)(1 - probFaili) + timeLargej(1 - probFailj)probFaili

 - probFailj·timeLargej - timeLargei·probFailj·probFaili <  - probFaili·timeLargei - timeLargej·probFaili·probFailj

timeLargei·probFaili(1 - probFailj) < timeLargej·probFailj(1 - probFaili)

timeLargei·probFaili / (1 - probFaili) < timeLargej·probFailj / (1 - probFailj)

Получается, что если отсортировать подзадачи по данному компаратору, будет оптимальный порядок решения. Заметим, что подзадачи probFail = 0, 1 тоже отсортируются правильно, то есть не являются частными случаями.

Вернемся к исходной задаче. Первым делом отсортируем все задачи полученным компаратором — ясно, что в другом порядке решать никогда не выгодно по времени, а количество очков от порядка не зависит. Посчитаем такую динамику: z[i][j] = пара из максимального матожидания суммы очков и минимального штрафного времени при данной сумме очков, если мы рассмотрели первые i задач, и прошло j реальных минут контеста. Возможно 3 перехода:

  1. либо мы не трогаем i-ую задачу: переходим в z[i + 1][j] с такими же матожиданиями

  2. либо мы решаем только легкую подзадачу: переходим в z[i + 1][j + timeSmalli], при этом очки увеличиваются на scoreSmalli, и штрафное время — на timeSmalli (мы как бы считаем, что будем решать i-ую задачу в самом начале контеста)

  3. либо мы решаем обе подзадачи: переходим в z[i + 1][j + timeSmalli + timeLargei], при этом очки увеличиваются на scoreSmalli + (1 - probFaili)scoreLargei, и штрафное время становится равным timeSmalli + (1 - probFaili)(j + timeLargei) + probFaili·penaltyTime(z[i][j]), где penaltyTime(z[i][j]) — значение матожидания штрафного времени из динамики

Итоговый ответ — наилучшее из значений z[n][i], (0 ≤ i ≤ t).

Матожидание очков может быть числом порядка 1012 с 6 знаками после точки, то есть его нельзя хранить в типе double абсолютно точно, а любая погрешность в вычислении матожидания очков может привести к ошибке в матожидании времени (претест #7). Чтобы этого избежать, можно, например, домножить все вероятности на 106, и считать первое матожидание в целых числах.

277E - Бинарное дерево на плоскости

Если бы не было ограничения на "бинарность", задача бы решалась простой жадностью. Каждая вершина дерева (за исключением корня) должна иметь ровно одного предка. При этом каждая вершина может быть родителем для любого количества вершин.

Назначим каждой вершине i (исключая корень) в качестве предка такую вершину pi, что ypi > yi и при этом pi — ближайшая к i. Перенумеруем все вершина в порядке невозрастания y. Очевидно, что pi < i (2 ≤ i ≤ n). То есть мы таким образом задали корневое дерево, в котором все дуги идут вниз, и оно минимально по длине.

Теперь вспомним про "бинарность". Но она на самом деле мало чего меняет: жадность превращается в min-cost-max-flow на той же матрице расстояний, но только теперь в каждую вершину должно приходить не более 2 единиц потока.

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

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

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

Всем привет!

Скоро начнется Codeforces Round #170, и его автором буду я. Надеюсь, многие будут рады решить все задачи.

UPD: Разбалловка задач динамическая, задачи расположены в порядке возрастания предполагаемой сложности.

И стандартная часть: спасибо Gerald за помощь в подготовке задач, Seyaua и sdya за тестирование, Delinur за переводы, MikeMirzayanov за создание платформы Codeforces.

Удачи!

UPD: Разбор

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

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

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

271A - Красивый год

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

271B - Простая матрица

Предпосчитаем для каждого числа от 1 до 105 следующее простое. Это можно сделать абсолютно любым способом. Главное — не забыть при проверке числа на простоту перебирать делители до корня из числа.

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

271C - Секрет

Если 3k > n, решения нет (потому что каждое множество должно содержать хотя бы 3 элемента). Иначе подходит, например, любое разбиение, в котором первые 3k чисел розданы следующим образом:

1 1 2 2 3 3 ... k k 1 2 3 ... k

Для каждого из k множеств, разность между вторым и первым элементами будет 1. При этом ясно, что разность между третьим и вторым элементами будет не 1 (более точно: 2k - i - 1 для i-го множества). Поэтому каждое множество точно не образует арифметическую прогрессию.

При этом не важно, как раздавать оставшиеся n - 3k чисел.

271D - Хорошие подстрочки

Построим из всех суффиксов строки бор (он же — несжатое суффиксное дерево). Давайте перебирать подстроки в порядке возрастания индексов, то есть сначала [1...1],  затем [1...2], [1...3], ..., [1...n], [2...2], [2...3], ..., [2...n], ... Заметим, что переход от одной строки к следующей по сути означает добавление одного символа в конец. Поэтому несложно поддерживать количество плохих букв и "текущую" вершину в боре. Если количество плохих букв не превосходит k, то строка — хорошая. И соответствующую вершину в боре нужно пометить, если она не была помечена ранее. Итоговый ответ — количество помеченных вершин в боре.

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

271E - Три коня

Утверждается, что любую пару вида (x, y) (x < y) можно привести к виду (1, 1 + k·d), где d — максимальный нечетный делитель числа y - x, а k — любое положительное целое число. Значит, каждое из (ai - 1) должно делится на d, то есть d является делителем gcd(a1 - 1, ..., an - 1), и его можно перебрать. Давайте посмотрим, для каких исходных пар d является максимальным нечетным делителем разности — это все пары с разностью ровно d, 2d, 4d, 8d, 16d и так далее. Вспомним, что числа в исходной паре не должны превышать m, а значит количество пар с фиксированной разностью t — ровно m - t.

Итоговое решение: просуммировать (m - 2ld) по всем d — нечетным делителям gcd(a1 - 1, ..., an - 1), при условии, что 2ld ≤ m.

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

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

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

263A - Красивая матрица

Если единственная единица стоит на пересечении r-ой строки и c-го столбца (в 1-индексации), то ответ: |3 - r| + |3 - c|.

263B - Квадраты

Если k > n, решения нет. Иначе отсортируем квадраты по убыванию размеров. Теперь нам подходит любая точка, которая принадлежит k-ому квадрату, и не принадлежит k + 1-ому. Например, можно вывести координаты (ak, 0).

263C - Круг чисел

Первым делом проверим, что каждое число встречается во входных данных 4 раза. Если это не так, то решения точно нет. Иначе попытаемся восстановить круг. Так как циклический сдвиг не имеет значения, пусть 1 будет первым числом. Второе и третье число должны быть соединены с 1 и между собой, поэтому вариантов мало, их все можно перебрать. Зная эти 3 первых числа, оставшаяся часть круга однозначно восстанавливается за линейное время. Возьмем последние 2 числа из круга, далее найдем число, которое соединено с ними, но еще не входит в ответ, и добавим его в конец. Если такое число нашлось, то продолжим процесс. Если в результате получилось добавить все числа в круг, то это и есть ответ.

263D - Цикл в графе

Рассмотрим такой простой путь v1, v2, ..., vr, что его нельзя продолжить добавлением вершины в конец, к vr. Это значит, что все соседи vr уже содержатся в пути. Найдем первую вершину в пути (vl), которая соединена с vr. Понятно, что vl, vl + 1, ..., vr — цикл, и он содержит всех соседей vr. По условию задачи, каждая вершина имеет хотя бы k соседей. Значит длина цикла не менее k + 1 ( + 1 получается за счет самой вершины vr).

263E - Ромб

Разделим ромб на 4 прямоугольных треугольника, как показано на рисунке ниже. В результате получится 1 треугольник размера k, 2 — размера k - 1, 1 — размера k - 2.

Разобьем задачу на 4 подзадачи. Самый удобный способ сделать это — 4 раза повернуть исходный массив на 90 градусов, и каждый раз запускать одну и ту же функцию, которая решает для одного треугольника. Функция будет возвращать 2-мерный массив, каждая ячейка которого будет содержать ответ для треугольника с вершиной в этой ячейке. Несложно понять, как совместить 4 таких массива, чтобы получить ответ для исходного ромба.

Основная идея решения для треугольника в том, что, зная ответ для одной клетки, мы можем "подвинуть" треугольник на единицу в любую сторону (вправо, вниз, влево или вверх) и пересчитать ответ за константное время. Вообще говоря, важны только 2 направления: вправо и вниз. А ответ для верхней левой клетки можно посчитать за O(k2) двумя вложенными циклами.

Определим следующие 5 функций:

  1. Сумма на диагональном отрезке из k элементов:

  2. Сумма на вертикальном отрезке из k элементов:

  3. Взвешенная сумма на вертикальном отрезке из k элементов:

  4. Сумма на треугольнике:

  5. Взвешенная сумма на треугольнике:

Посчитать первые 3 функции за O(nm) в сумме совсем просто. Остальные функции можно быстро считать так:

triangle(x, y + 1) = triangle(x, y) - diagonal(x, y - k + 1) + vertical(x, y + 1)

triangleWeighted(x, y + 1) = triangleWeighted(x, y) - triangle(x, y) + verticalWeighted(x, y + 1)

Формулы для перемещения треугольника в другие стороны почти ничем не отличаются.

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

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

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

Изначально мы хотели расположить задачи по сложности так: A-C-E-D-B. Насчет порядка последних двух мнения разделились. Посмотрим, что покажут результаты.

166A - Ранклист

В этой задаче нужно сделать то, что написано в условии — отсортировать команды по заданному компаратору: (p1 > p2) или (p1 = p2 и t1 < t2). После этого надо разбить команды на группы одинаковых, и найти размер группы, команды из которой делят k-ое место. Многие почему-то при равенстве числа задач сортировали команды по убыванию времени, а не по возрастанию. Такие решения случайно проходят претесты и получают WA #13.

166B - Многоугольники

Так как многоугольник A — выпуклый, достаточно проверить, что все вершины многоугольника B лежат строго внутри многоугольника A. Идейно самое простое решение – построить выпуклую оболочку из точек обоих многоугольников, и проверить, что в нее входят точки только из первого многоугольника. Но в таком решении придется писать выпуклую оболочку, которая обязательно берет все точки, лежащие на одной прямой, а это на порядок сложнее других решений и содержит частный случай.

Второе решение – разрежем A на треугольники (по номерам вершин): (1, 2, 3), (1, 3, 4), (1, 4, 5), …, (1, n - 1, n). Последовательность углов 2 - 1 - 3, 2 - 1 - 4, 2 - 1 - 5, …, 2 - 1 - n монотонно возрастает. Значит, для каждой точки многоугольника B можно за log(n) бинпоиском найти, какому треугольнику она может принадлежать по углу относительно вершины 1.

Аналогично можно разрезать многоугольник A вертикальными линиями на O(n) трапеций. В таком случае бинпоиск будет просто по x-координате.

166C - Медиана

Если в исходном массиве нет числа x, то, очевидно, нужно его добавить, +1 к ответу. Далее делаем следующим образом. Пока медиана массива строго меньше x, нужно ее увеличивать. Очевидно, самый надежный способ увеличить медиану – добавить в массив максимальное число (105). Аналогично, пока медиана строго больше x, добавляем в массив числа 1. Ограничения позволяют добавлять числа по одному и пересчитывать медиану “в лоб”.

Также есть решение вообще без случаев: пока медиана не стала равна x, добавляем в массив число x.

166D - Обувной магазин

Будем рассматривать всех людей в порядке убывания их размера обуви. Заметим, что при рассмотрении i-го человека нам важны максимум две пары обуви: размера li и li + 1. Это позволяет написать динамику с состоянием: (номер первого нерассмотренного человека i, доступна ли для покупки обувь размера li, доступна ли для покупки обувь размера li + 1). Переходы: оставить i-ого человека без обуви, или продать ему обувь одного из двух подходящих размеров.

166E - Тетраэдр

Очевидное решение динамикой: нам важно только сколько ходов осталось сделать муравью, и в какой из четырех вершин он стоит. Получается 4n состояний, из каждого по 3 перехода – при аккуратной реализации такое может пройти. Можно заметить, что вершины A, B, C эквивалентны между собой. Это позволяет написать такое решение:

int zD = 1;
int zABC = 0;
for (int i = 1; i <= n; i++) {
	int nzD = zABC * 3LL % MOD;
	int nzABC = (zABC * 2LL + zD) % MOD;
	zD = nzD;
	zABC = nzABC;
}
cout << zD;

Также задачу можно решать за log(n) бинарным возведением в степень n некоторой матрицы 2 × 2.

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

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

Автор RAD, 13 лет назад, По-русски
Добрый день

К сожалению, по независящим от нас причинам раунд Codeforces Beta Round #93 переносится на завтра: 9-ое ноября 21:00 по московскому времени (ровно на сутки вперед).

Приносим извинения за доставленные неудобства.
 
До завтра,

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

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

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

Пока все мировое сообщество спортивных программистов затаив дыхание ждет новостей о времени и месте проведения финала, мы решили не затягивать с раундом и в поезде по дороге из Петрозаводска в Саратов придумали задачи. В купе присутствовали – Михаил Мирзаянов, Артем Рахов, Максим Иванов. Задачи перевела Мария Белова.

Удачи!

Артем Рахов и команда Codeforces

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

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

Автор RAD, 14 лет назад, По-русски
Добрый вечер!

Приглашаю всех поучаствовать в Codeforces Beta Round 52 (Div. 2). Сегодняшний раунд готовили Михаил Мирзаянов, 
Макс Иванов и Мария Белова.

Возможно для участников вне конкурса не будет доступна вкладка "взломы". Не стоит паниковать, к следующему Div. 
2 раунду она обязательно появится.

Удачи!
Артем Рахов и команда Codeforces

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

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

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

Всем привет!

Недавний тестовый раунд прошел хорошо. Ожидается, что теперь все будет работать быстрее. В подготовке задач сегодняшнего раунда принимали участие: Михаил Мирзаянов, Николай Кузнецов, Иван Фефер и Мария Белова.

Удачи!

Артем Рахов и команда Codeforces

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

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

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

Добрый вечер!

Скоро у многих начинается сессия, а у кого-то она уже в самом разгаре. Хочу пожелать всем отличных оценок и побольше халяв!

Раунд помогали готовить: Николай Кузнецов, Геральд Агапов, Иван Фефер.

Удачи!

Артем Рахов и команда Codeforces


UPD: 

Рейтинги будут обновлены позднее

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

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

Автор RAD, 14 лет назад, По-русски
Добрый вечер

Вчера вечером делегация Саратовского университета вернулась из Питера, с полуфинала чемпионата мира по программированию ACM-ICPC NEERC 2010/11. Если кто-то еще не видел результаты: все 4 саратовские команды получили дипломы, а мы (Saratov SU 2) вышли в финал. Команда Saratov SU 1 тоже попала в число выходящих в финал, что довольно круто для их первого раза, но не едет из-за ограничения "одна команда на один университет".

А еще мы подготовили Div. 2 раунд. За оперативную помощь спасибо Эдварду Давтяну, Геральду Агапову и Марии Беловой.

Всем удачи!
Артем Рахов и команда Codeforces


К сожалению, было обнаружено несоответствие авторского решения и условия задачи E. Приносим свои извинения всем участникам соревнования. Все решения, не получившие Accepted ранее, были перетестированы. Спасибо участнику xcr за обнаружение проблемы.

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

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

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

Внимание участникам Дивизиона 1! В Codeforces Beta Round #32 в качестве тестовой возможности будет доступно участие «Вне конкурса».

Как вы все прекрасно знаете, 2-ое октября – День рожденья Махатмы Ганди. Мы посвящаем сегодняшний раунд ему, и многим другим замечательным людям, родившимся 2-го октября :)

Раунд помогали готовить Михаил Мирзаянов, Матов Дмитрий и Макс Иванов.

Отдельное спасибо Юлии Сатушиной за перевод большей части условий.

Всем удачи!


Артем Рахов и команда Codeforces

UPD:
  • Задачи
  • Результаты
  • Победитель: Rei
  • Решения участников из Дивизиона 1 будут протестированы чуть позже

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

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

Автор RAD, 14 лет назад, По-русски
Приветствую всех на Codeforces Beta Round 31 (Div. 2, Codeforces format)

Раунд для вас готовили: Михаил Мирзаянов, Дмитрий Матов, Макс Иванов и я.

Удачи!
Артем Рахов и команда Codeforces

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

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

Автор RAD, 14 лет назад, По-русски
В России сегодня не просто 20-е сентября, а День Рекрутера. В Азербайджане – нефтяника, а в Беларуси – таможенника. Для нас же это плюс ко всему еще один хороший день, чтобы провести раунд. Добро пожаловать на Codeforces Beta Round #29 (Див. 2, Codeforces format)!

Готовить раунд помогали: Михаил МирзаяновДмитрий МатовГеральд Агапов и Николай Кузнецов, за что им спасибо.

Счастливого Дня рекрутера,
Артем Рахов

UPD:

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

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

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

Разделим все грузовики на классы по сумме l + r + c. Утверждается, что все входящие в ответ грузовики находятся в одном классе.

Для каждого класса решим задачу отдельно. Будем рассматривать все грузовики из одного класса в том порядке, в котором они едут, и поддерживать такую динамику: z[k] = наибольшая сумма, которую можно набрать, если у последнего взятого грузовика ri = k. Рассмотрим грузовик номер i - возможны 2 перехода:

Он может улучшить z[ri] значением z[ri + ci] + vi, т. е. продолжить уже начатую колонну машин, в которой r у последнего грузовика равно ri + ci. (Для соседних в колонне грузовиков должно выполняться: rprev  =  ri  +  ci )

Если li = 0, он может улучшить z[ri] значением vi, т. е. стать первым в новой колонне машин. (Для первого в колонне грузовика должно выполняться: li = 0)

Ответ на задачу будет записан в z[0].

Для восстановления вошедших в ответ грузовиков, вместе с наибольшей суммой в z можно хранить номер последнего грузовика, улучшившего эту сумму. Еще мы отдельно храним предка p для каждого грузовика, улучшившего хоть что-то в z. Этот предок считается один раз когда мы рассматриваем i-ый грузовик и больше не изменяется: p[i] = -1 если грузовик i стал новым началом колонны, иначе p[i] = последний грузовик, улучшивший z[ri + ci].

Начинать восстановление ответа нужно с последнего грузовика, улучшившего z[0]. Дальше все восстанавливается только по p.

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

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

Автор RAD, 14 лет назад, По-русски
Этим контестом мы хотим всех поздравить с наступившим новым учебным годом. Желаем отличных оценок, халяв на сессии и Accepted на контестах. Пусть этот год принесет вам много новых интересных знаний! 

Артем Рахов и команда Codeforces

P. S. Обратите внимание, что раунд пройдет по правилам Codeforces. Ознакомьтесь с правилами до начала соревнования. Удачи!

UPD: 

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

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

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

Доброго времени суток.


Авторы задач сегодняшнего раунда – Михаил Мирзаянов и я. Хочу сказать спасибо Дмитрию Левшунову за техническую помощь в организации контеста, а так же Геральду Агапову и Николаю Кузнецову за написание альтернативных решений.


Желаю всем удачи!


UPD: Контест закончился, всем спасибо за участие.

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

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

Автор RAD, 14 лет назад, По-русски
Всем привет

Сегодня автор большинства задач - Дмитрий Жуков, за что ему огромное спасибо. 
Так же хочу поблагодарить Михаила Мирзаянова за выбор задач на раунд и организацию контеста и Юлию Сатушину за перевод условий.

Удачи!

UPD:

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

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

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

Приветствую всех на Codeforces Beta Round #22

Обратите внимание, что на этот раз регистрация возможна в течение всего раунда. Сам раунд начнется в 19:00 по Москве.

Автором задач этого контеста буду я. Большое спасибо Михаилу Мирзаянову за помощь в подготовке контеста, Эдварду Давтяну и Николаю Кузнецову за написание проверочных решений, и Юлии Сатушиной за перевод условий на английский.

Удачи на раунде!

UPD: Контест окончен. Всем спасибо за участие!
Задачи
Результаты
Победитель Kasparyanm_Mihail получает за контест +203 к рейтингу!

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

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

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

Добро пожаловать на Codeforces Beta Round #18

Авторы задач сегодняшнего контеста: Михаил Мирзаянов, Эдвард Давтян и я. Спасибо Дмитрию Матову за помощь в подготовке условий и Юлии Сатушиной за перевод задач на английский язык.

Всем удачи!

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

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

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

Добрый день.

Сегодня автором задач выступаю я. Хочу сказать спасибо создателю Codeforces Михаилу Мирзаянову и Эдварду Давтяну за помощь в подготовке задач и Юлии Сатушиной за отличный перевод на английский.

Желаю всем выйти в первый дивизион!
Артем Рахов

UPD: Контест закончился, всем спасибо за участие!

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

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