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

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

Доброго вам предновогоднего дня!

На часах без пары суток Новый Год, а значит самое время подводить итоги прошедшего. У меня нет спич-райтеров для слов в стиле "то, что совсем недавно казалось почти невозможным, становится фактом нашей жизни", поэтому коротко. Всем спасибо! Ваш негаснущий интерес и постоянная помощь вдохновляют команду Codeforces на новые свершения! Гениальные авторы, бойцы невидимого фронта тестеры, неутомимые и жадные до знаний участники раундов и тренировок — все вы помогаете сделать Codeforces лучше!

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

  • Простой способ добавить соревнование из Polygon в Codeforces::Тренировки. Недавно появился подробный туториал (спасибо, elena!)
  • Черновики, встроенные в текстовые поля форм в проектах Codeforces и Polygon.
  • Множественные улучшения интерфейса участника соревнований.
  • Множественные улучшения библиотеки Testlib.
  • Улучшена производительность Polygon на больших ручных тестах.
  • Неоднократно обновлялись версии компиляторов до свежих.
  • Поддержаны языки: MS C#, Python 3, Go, JavaScript V8.
  • Обновлены тестирующие серверы Codeforces и внедрены в работу.
  • Polygon переведен на использование HTTPS.
  • Проведён первый сезон еженедельных тренировок Codeforces (12 эпизодов).
  • Поддержаны организации в профиле и рейтинг организаций.
  • Добавлены многочисленные контесты в Codeforces::Тренировки. Наверное, самое ценное — большое количество контестов Андрея Станкевича.
  • Внедрены тесты для чекеров и валидаторов в Polygon.
  • Внедрена поддержка макро-языка в скрипты генерации тестов в Polygon.
  • На Codeforces появились группы, с контестами и блогами.
  • Внедрена возможность составления мэшапов — контестов для личных и групповых тренировок.

Кроме того, за 2013-й год мы провели не только 64 классических раунда, но и несколько турниров:

А еще мы успели оказаться пресс-партнером финала ACM-ICPC 2013!

И как детективный сюжет не может обойтись без погони, так и годовой отчет не может обойтись без веселых картинок. Вот пачка наглядных картинок роста Codeforces:

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

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

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

Был такой пост Timus и BigInteger.isProbablePrime. В нем описывалась проблема и ее решение от команды Тимуса.

Напомню суть. Класс SecureRandom для своей инициализации должен взять откуда-то неожиданные данные, которые злоумышленнику тяжело угадать. JRE для этого использует /dev/random. В Linux это такой специальный поток, в который драйверы выводят шум от разных устройств. В результате значения там в самом деле удачно подходят для инициализации криптографического генератора случайных чисел.

На Windows происходит всё примерно так же, но шум берется из разных мест. В результате, если запустить процесс из-под ограниченного пользователя, то чтобы взять этот шум процесс начинает инициализировать профиль пользователя в системе, что требует времени. В зависимости от характера песочницы, вероятно, из некоторых мест процесс и не сможет взять энтропию. Например, на Timus это приводило к вердикту Restricted Function.

На Codeforces это приводило до недавнего времени скорее к Time Limit Exceeded, так как загрузка профиля требовала дополнительного времени.

Олимпиадникам обычно этот SecureRandom и даром не нужен, но стандартная реализация BigInteger.isProbablePrime(BigInteger) использует его.

Команда Timus предложила такое решение. Они похачили стандартную библиотеку, заменив реализацию BigInteger и, видимо, подложив её в rt.jar. Короче, теперь пользовательские решения запускаются у них с измененной стандартной библиотекой.

Мне кажется это так себе решение:

  • возможно, что SecureRandom используется еще в каком-то полезном месте (или будет использоваться после апдейта);
  • тяжело обновлять JRE на тестирующих машинах — ведь нельзя просто так подложить rt.jar из прошлой версии, придется хачить новый rt.jar;
  • решение требует дополнительной настройки окружения, что всегда плохо (например, какой-нибудь portable timus tester либо не будет делать песочницу вообще, либо будет иметь эту проблему, либо большую инструкцию в стиле «не забудьте пропатчить Java!»).

Сегодня я нашел значительно лучшее решение, которое и накатил на Codeforces. Для JRE существует системное свойство, которое указывает откуда надо читать энтропию: -Djava.security.egd, которое по-умолчанию равно в Windows значению file:/dev/random

Так вот оказывается возможно брать энтропию из обычного файла, для этого достаточно передать -Djava.security.egd=file:имя-файла. Проблема решена. (Конечно, я сначала попробовал передать file:/dev/urandom, но это не помогло)

Напоследок, напомню, что на Timus для того, чтобы добиться повторяемости при rejudges пошли на беспрецедентный шаг и в пропатченной версии BigInteger используют Random c фиксированным randseed. В данном случае, надо просто в качестве -Djava.security.egd указывать какой-то фиксированный файл. Если хочется иметь каждый раз разное значение, то можно создать случайный файл в директории запуска решения и использовать его.

Конечно, этот трюк полностью разрушает криптостойкость SecureRandom, но в случае запуска решений участников это допустимо.

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

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

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

Дошли руки и до поддержки столь модного сейчас JavaScript. Выбрана реализация V8, как наиболее трендовая и развиваемая. С помощью бубна и литра колы я скомпилировал V8 под Windows. Забавно оказалось — я всё думал, что придется городить workaround, чтобы поддержать чтение в JavaScript из консоли. Оказалась, что d8 сам всё умеет. Вот пример для нахождения A+B:

var line = readline().split(' ')
print(parseInt(line[0]) + parseInt(line[1]))

Было замечено, что если не поставить перевод строки в конце ввода, то readline вернет undefined. Еще один аргумент в пользу того, что все строки должны заканчиваться переводом.

В качестве небольшого исследования и чтобы потешить свою уверенность в мнении, что все языки без статической типизации бесконечно медленны, я написал реализацию HeapSort на С++, Java и JavaScript для сортировки 107 значений от 0 до 9999999. Видимо, этот бенчмарк неплохо показывает как быстро будут работать ваши решения, если вы пишите их в стиле старого доброго Pascal (всё на массивчиках, без выделений памяти и без мощных встроенных библиотек). Результаты для меня оказались неожиданными:

Language Compiler Running time, ms
C++ MinGW 4.7.2 32-bit 630
C++ MS VS 2010 32-bit 650
Java Oracle Java 6 32-bit 1060
Java Oracle Java 7 32-bit 1050
JavaScript V8 3.23.0 32-bit 1700
Pascal Delphi 7 32-bit 630
Pascal FreePascal 2.6.2 32-bit 730
Python 2 Python 2.7.4 32-bit 12500
Python 3 Python 3.3.2 32-bit 20000
Ruby Ruby 1.9.3p0 (2011-10-30, i386-mingw32) 32-bit 520000
Ruby Ruby 2.0.0p353 (2013-11-22, i386-mingw32) 32-bit 345000
Scala Scala 2.10.3 (over Oracle Java 7 32-bit) 1550
Go Go 1.2 32-bit 1780
D DMD v2.064.2 32-bit 800
C# Mono 2.10.9 32-bit 850
C# MS CSC .Net 4.5.1 64-bit 850
Perl Perl v5.12.2 for MSWin32-x86-multi-thread 195000

Отставание-то всего ничего! Я конечно понимаю, что такой код можно заанализировать и jit-ом прям в нативный закомпилить, но все же. Впечатляет. Кстати, а Java с её хваленным и нахаченным JIT не на высоте.

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

Вы можете оставлять в комментариях ссылки на pastebin или сабмиты в систему. Конечно, будут удобнее пулл реквесты прямо в проект.

Если будете писать свою реализацию, то постарайтесь написать аккуратно и опрятно. Пожалуйста, максимально придерживайтесь вариантов для C++, Java и JavaScript.

UPD 1: С помощью alexei-zayakin добавил Pascal.

UPD 2: С помощью gchebanov Wizmann и juancate добавил Python 2, Python 3, Ruby, Scala, Go.

UPD 3: Вот скомпилированный для Window V8.

UPD 4: Обновил версии некоторых компиляторов, обновил результаты.

UPD 5: Добавил D. Спасибо, Gassa.

UPD 6: Добавил C#. Спасибо, gmogelashvili.

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

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

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

Прямо сейчас идет этап Открытого кубка, подготовленный силами СПбГУ. Этап стартанул с некоторым опозданием в 12:25. Текущие результаты доступны по ссылкам:

Что любопытно, задачи обоих дивизионов кажутся (на первый взгляд, по названиям) одинаковыми. Может в таком случае лучше иметь совмещенный ранклист?

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

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

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

Разбор задач подготовили: Fefer_Ivan, NALP.

371A - K-периодичный массив

Для того, чтобы массив был периодическим, элементы 1, 1 + k, 1 + 2 * k, ... должны быть равны. Также, элементы 2, 2 + k, 2 + 2 * k, ... должны быть равны. И так далее до k. То есть существует k групп элементов, таких что каждый элемент принадлежит ровно одной группе. Каждая группа может рассматриваться независимо. Рассмотрим группу в которой a единичек и b двоек. Все элементы в одной группе должны быть равны. Для того, чтобы этого достичь необходимо либо все единички сделать двойками (что потребует a операций изменения), либо все двойки сделать единичками (что потребует b операций изменения). Для того, чтобы решение было оптимальным, необходимо выбрать способ, который требует наименьшее количество операций изменения.

371B - Как лисица сыр делила

Из условия понятно, что лисица может производить над числами лишь три операции: поделить какое-то из них на 2, поделить на 3 или поделить на 5. Для начала, давайте представим оба числа в форме a = x·2a2·3a3·5a5, b = y·2b2·3b3·5b5, где x и y не делятся ни на 2, ни на 3, ни на 5. Если x ≠ y, то понятно, что как бы лисица не делила числа a и b, то сравнять она их не сможет, а значит, следует вывести “-1”. В противном случае, требуется сравнять степени чисел 2, 3 и 5 в разложениях, за наименьшее количество операций это делается так: от наибольшей степени отнимается единица, пока она не сравняется с меньше степенью. Таким образом, ответ равен |a2 - b2| + |a3 - b3| + |a5 - b5|.

371C - Гамбургеры

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

Пусть для одного гамбургера требуется сb кусочков хлеб, cs колбасы и cc сыра (эти данные нетрудно подсчитать из строки-рецепта “гамбургера от Поликарпа”). Тогда всего необходимо cb·x кусочков хлеба, cs·x колбасы и cс·x сыра. За лишние ингредиенты Поликарпу придется заплатить, поэтому в сумме он отдаст в магазине max(0, x·cb - nbpb + max(0, x·cs - nsps + max(0, x·cc - ncpc рублей. Если это значение меньше, чем r, то Поликарп сможет сделать x гамбургеров, а иначе — нет.

С помощью бинарного поиска найдем такое максимальное x, что max(0, x·cb - nbpb + max(0, x·cs - nsps + max(0, x·cc - ncpc ≤ r, такое число и будет ответом на задачу.

371D - Сосуды

Наивное решение этой задачи работает следующим образом. Давайте хранить количество жидкости в каждом сосуде в массиве v. Тогда для ответа на запрос второго типа надо просто взять значение из этого массива. Для выполнения запроса первого типа (налить x жидкости в сосуд i) надо выполнить следующую процедуру:

  1. Если x = 0 то вся вода уже использована, закончить процедуру.
  2. Если i > n то вся оставшаяся вода будет разлита на пол, закончить процедуру.
  3. Если x единиц воды помещаются в сосуд i, то прибавить x к v[i] и закончить процедуру.
  4. Заполнить сосуд i полностью и вычесть использованное для этого количество воды из x.
  5. Присвоить i = i + 1.
  6. Перейти к первому шагу.

В худшем случае, такая процедура будет итерироваться по всем сосудам для каждого запроса. Например, если у нас есть n сосудов вместимости 1, то запрос вида 11n потребует O(n) времени на выполнение.

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

То есть вместо i = i + 1 присвоение должно выглядеть так i = найти_следующий_неполный_сосуд(i).

Для реализации этой функция существует множество структур данных. Например, можно использовать упорядоченное множество (set в C++, TreeSet в Java). Давайте поддерживать множество индексов незаполненных сосудов. Тогда для того, чтобы найти следующий сосуд после i-того необходимо найти наименьшее число в множестве, которое строго больше i. Для этого существуют встроенные методы (upper_bound в C++, higher в Java).

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

Теперь алгоритм выполняет не более, чем O((m + n)logn) операций для всех запросов. Во время каждой итерации процедуры наливания существует два варианта: либо сосуд будет полностью заполнен водой (а такое может произойти только n раз, так как у нас всего n сосудов), либо у нас закончится вода и процедура завершится. Таким образом в сумме будет совершено не более, чем O(m + n) итераций процедуры наливания. Каждая итерация требует не более одного запроса к упорядоченному множеству, следовательно решение работает за O((m + n)logn).

371E - Реформа метро

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

Сначала давайте отсортируем все станции по их координате. Главная идея в этой задаче заключается в том, что выбранные k станций обязательно будут следовать подряд в этом отсортированном списке. Ограничения не позволяют делать это “в лоб”, поэтому нам необходимо решение быстрее.

Определим функцию f(i, k) — попарное расстояние среди k подряд идущих в отсортированном списке станций, начиная с позиции i. Для начала, давайте подсчитаем f(0, k) (здесь и далее будем использовать 0-нумерацию). Это делается несложно за линейное время: по определению f(0, 0) = 0, а по значению f(0, i) найдем значение f(0, i + 1):

 = f(0, i) + xi·i - sum(0, i - 1)

,

где функция sum(l, r) означает сумму xi, где l ≤ i ≤ r, значения этой функции легко считаются за O(1) с помощью частичных сумм.

Теперь научимся считать по значению f(i, k) значение f(i + 1, k): для этого необходимо исключить из набора координату xi и добавить xi + k. Аналогично выше рассуждениям: f(i + 1, k) = f(i, k) - (sum(i + 1, i + k - 1) - xi·(k - 1)) + (xi + k·(k - 1) - sum(i + 1, i + k - 1)).

Таким образом считаются значения f(i, k) для любых корректных значений i. Найдем минимальное значение, где оно достигается и выведем ответ. Решение работает за линейное время.

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

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

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

Обратите внимание на некоторые изменения в расписании. Дважды.

Доброго времени суток, сообщество Codeforces!

Рад Вам сообщить, что мы в очередной раз делаем раунд из задач одной из олимпиад для саратовских школьников. На этот раз — раунд для второго дивизиона. Раунд начнется в необычное для Codeforces время: 7 декабря в 11:00 MSK

Задачи были подготовлены большим коллективом сотрудников и студентов Центра олимпиадной подготовки программистов Саратовского государственного университета.

Участники из первого дивизиона, как обычно, могут поучаствовать вне конкурса.

Наш текущий план: разбаловка задач будет динамической.

UPD: Перенесли с 13:00 на 11:00 из-за Kotlin Challenge.

UPD 2: Опубликован разбор задач.

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

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

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

Завтра (1-го декабря) в 10:00 стартует полуфинал NEERC чемпионата мира по программированию ACM-ICPC.

Болеть за участников можно будет по этой ссылке.

Соревнование будет одновременно проходить в Санкт-Петербурге, Барнауле, Тбилиси и Ташкенте. Судя по результатам пробного тура всего за право выйти в финал поборются 235 команд.

Полуфинал NEERC проводится с 1996-го года. Вот список чемпионов NEERC прошлых лет.

Год Чемпион NEERC
1996 СПб ИТМО
1997 СПбГУ
1998 МГУ
1999 СПбГУ
2000 СПбГУ
2001 СПб ИТМО
2002 МГУ
2003 СПб ИТМО
2004 СПб ИТМО
2005 МГУ
2006 МГУ
2007 СПб ИТМО
2008 Саратовский ГУ
2009 Петрозаводский ГУ
2010 СПб ИТМО
2011 СПб ИТМО
2012 СПб ИТМО
2013 СПбГУ

Желаю участникам продемонстрировать завтра все свои сильные стороны на поприще соревнований по программированию. Удачи!

Сам, конечно, буду болеть за своих ребят — Саратовский государственный университет.

P.S. Соревнование закончено. Поздравляю победителей:

  • 1 место: SPb SU 4 (Kunyavskiy, Egorov, Suvorov)
  • 2 место: Moscow SU 1 (Pyaderkin, Evstropov, Omelyanenko)
  • 3 место: Saratov SU 1 (Agapov, Fefer, Kudasov)

С полными результатами можно ознакомиться по ссылке.

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

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

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

Добро пожаловать на 2013-2014 CT S01E012: Codeforces Trainings Season 1 Episode 12. Продолжительность тренировки — 5 часов. Тренировка открыта как для команд, так и для индивидуальных участников. После ее окончания вы можете дорешивать задачи тренировки или поучаствовать в ней виртуально, если не смогли принять участие одновременно со всеми. Пожалуйста, участвуйте в тренировке честно.

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

Регистрация на тренировку будет доступна со страницы Тренировки и будет открыта до окончания тренировки. Регистрируя команду, выберите именно тех её членов, кто будет писать тренировку.

Пожалуйста, не решайте этот контест, если вы уже решали эти задачи ранее.

Удачи!

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

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

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

Добро пожаловать на 2013-2014 CT S01E011: 2013-2014 ACM-ICPC East Central North America Regional Contest (ECNA 2013). Продолжительность тренировки — 5 часов. Тренировка открыта как для команд, так и для индивидуальных участников. После ее окончания вы можете дорешивать задачи тренировки или поучаствовать в ней виртуально, если не смогли принять участие одновременно со всеми. Пожалуйста, участвуйте в тренировке честно.

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

Регистрация на тренировку будет доступна со страницы Тренировки и будет открыта до окончания тренировки. Регистрируя команду, выберите именно тех её членов, кто будет писать тренировку.

Пожалуйста, не решайте этот контест, если вы уже решали эти задачи ранее.

Удачи!

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

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

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

Добрый день.

Наверняка кого-то расстрою, кого-то обрадую: мы вынуждены немного перенести вперед Раунд 210. Раунд будет перенесен на полтора часа вперед и начнется в 21:00. Я понимаю, что участникам с восточной части страны и мира будет менее удобно.

На самом деле для меня причина приятная — просто время проведения раунда со снайперской точностью пересеклось во временем празднования дня рожденья (сегодня ей уже 2 года!) моей доченьки. Дело в том, что за последнее время было внедрено несколько важных улучшений в глубине тестирующей системы (изменен механизм кэширования), поэтому мне бы не хотелось в случае каких-либо сложностей встать перед выбором: сорвать раунд или сорвать семейный праздник.

Наверняка, есть и те, кому новое время покажется более удобным.

До встречи на раунде!

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

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

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

Добро пожаловать на 2013-2014 CT S01E09: 2011 German Collegiate Programming Contest (GCPC 2011) + GCJ 2009 R3 C-D. Продолжительность тренировки — 5 часов. Тренировка открыта как для команд, так и для индивидуальных участников. После ее окончания вы можете дорешивать задачи тренировки или поучаствовать в ней виртуально, если не смогли принять участие одновременно со всеми. Пожалуйста, участвуйте в тренировке честно.

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

Регистрация на тренировку будет доступна со страницы Тренировки и будет открыта до окончания тренировки. Регистрируя команду, выберите именно тех её членов, кто будет писать тренировку.

Удачи!








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

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

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

Сегодня состоялся основной тур Открытой Всесибирской олимпиады по программированию. На задачах этого же соревнования проходил этап Открытого Кубка.

Зайдя на http://olimpic.nsu.ru/widesiberia/archive/wso14/2013/rus/index.shtml, так и не увидел ссылки на текущие результаты в Новосибирске. Их не было в интернете или я просто не нашел?

Были ли команды, участвующие в Новосибирске, в ранклисте Кубка?

Предлагают здесь обсудить задачи и впечатления от онсайта.

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

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

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

Добро пожаловать на 2013-2014 CT S01E08: 2013 ACM-ICPC Rocky Mountain Regional Contest (RMRC 2013) + GCJ 2009 WF C-D. Продолжительность тренировки — 5 часов. Тренировка открыта как для команд, так и для индивидуальных участников. После ее окончания вы можете дорешивать задачи тренировки или поучаствовать в ней виртуально, если не смогли принять участие одновременно со всеми. Пожалуйста, участвуйте в тренировке честно.

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

Регистрация на тренировку будет доступна со страницы Тренировки и будет открыта до окончания тренировки. Регистрируя команду, выберите именно тех её членов, кто будет писать тренировку.

Удачи!

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

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

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

Добрый день.

Напоминаю, что в воскресенье состоится интернет-версия соревнования 2013-2014 ACM-ICPC, NEERC, Южный четвертьфинал. Начало в 11:00.

Соревнование состоится в разделе Тренировки. К участию приглашаются в большей степени команды — ведь контест подготавливался именно как командное соревнование.

Приглашаю к участию — уверен, это отличный способ потренироваться к четвертьфиналу и/или полуфиналу.

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

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

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

Добро пожаловать на 2013-2014 CT S01E07: Codeforces Trainings Season 1 Episode 7. Продолжительность тренировки — 5 часов. Тренировка открыта как для команд, так и для индивидуальных участников. После ее окончания вы можете дорешивать задачи тренировки или поучаствовать в ней виртуально, если не смогли принять участие одновременно со всеми. Пожалуйста, участвуйте в тренировке честно.

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

Регистрация на тренировку будет доступна со страницы Тренировки и будет открыта до окончания тренировки. Регистрируя команду, выберите именно тех её членов, кто будет писать тренировку.

Удачи!

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

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

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

Доброго дня.

Уже сегодня (18-го октября) в стенах Саратовского государственного университета состоится четвертьфинал Южного региона NEERC. Желаю удачи всем участникам, а болельщикам — положительных эмоций!

В этом году нам удалось обновить почти все компьютеры участников — на каждом из них не менее 4GB памяти (почти везде 8) и процессор intel i5. Команды как обычно сидят довольно просторно — во многих классах 4-6 команд, в двух особо больших — по десять команд. В соревновании примет участие почти 60 команд.

А 17-го октября (уже вчера) завершился Code Game Challenge — неофициальное развлекательное соревнование по программированию искусственного интеллекта. Участники испытали на себе все прелести игры в хоккей. В этом году шоу с демонстрацией турнира получилось особенно драйвовым — многие игры было очень интересно смотреть.

Вот пример интересной игры с участием позиционной стратегии от BumVV от Волгоградского ГУ. Мне очень понравилась их стратегия. Качество ролика получилось так себе — на самом деле шайба двигается плавно и наглядно.

Победили в кодохоккее:

  1. Uncrashable — North Caucasus FU #1 (9 очков в финале)
  2. Pamazanov_SUPER — North Caucasus FU #2 (6 очков в финале)
  3. kitty — Povolzhskiy STU (3 очка в финале)

Молодцы!

За ходом соревнования можно будет наблюдать с сайта http://contest.sgu.ru/, а позже мы обязательно проведем интернет-версию. Болеем с 10:00, а участникам — удачи!

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

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

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

Добро пожаловать на 2013-2014 CT S01E06: 2002-2003 ACM-ICPC Northwestern European Regional Contest (NWERC 2002) + Some Problems from COCI and POI. Продолжительность тренировки — 5 часов. Тренировка открыта как для команд, так и для индивидуальных участников. После ее окончания вы можете дорешивать задачи тренировки или поучаствовать в ней виртуально, если не смогли принять участие одновременно со всеми. Пожалуйста, участвуйте в тренировке честно.

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

Регистрация на тренировку будет доступна со страницы Тренировки и будет открыта до окончания тренировки. Регистрируя команду, выберите именно тех её членов, кто будет писать тренировку.

Удачи!

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

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

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

Добро пожаловать на 2013-2014 CT S01E05: 2007 Nordic Collegiate Programming Contest (NCPC 2007) + Selected Problems from 2009 Google Code Jam World Finals (GCJ WF 2009). Продолжительность тренировки — 5 часов. Тренировка открыта как для команд, так и для индивидуальных участников. После ее окончания вы можете дорешивать задачи тренировки или поучаствовать в ней виртуально, если не смогли принять участие одновременно со всеми. Пожалуйста, участвуйте в тренировке честно.

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

Регистрация на тренировку будет доступна со страницы Тренировки и будет открыта до окончания тренировки. Регистрируя команду, выберите именно тех её членов, кто будет писать тренировку.

Удачи!

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

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

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

Добро пожаловать на 2013-2014 CT S01E04: 2013 Kashan Contest + Some Problems of 2009 Google Code Jam World Finals (GCJ WF 2009). Продолжительность тренировки — 5 часов. Тренировка открыта как для команд, так и для индивидуальных участников. После ее окончания вы можете дорешивать задачи тренировки или поучаствовать в ней виртуально, если не смогли принять участие одновременно со всеми. Пожалуйста, участвуйте в тренировке честно.

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

Регистрация на тренировку будет доступна со страницы Тренировки и будет открыта до окончания тренировки. Регистрируя команду, выберите именно тех её членов, кто будет писать тренировку.

Основной набор задач на тренировку предоставил mohammadrdeh. Спасибо, большая помощь! Берите пример.

Удачи!

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

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

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

Смотрю на часы и говорю вам "доброй ночи".

Всегда был уверен, что ездить на сбора важно и полезно — даже если ты уже лет 10 как тренер. Этим летом на Петрозаводских сборах с удовольствием пообщался сразу с несколькими неравнодушными пользователями Codeforces, кто накидал мне ряд хороших идей. Спасибо!

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

Хотите подробностей? Их есть у меня. Каждые 180 дней оценки начинают фактически делиться пополам. Например, когда пройдет полгода от финала ACM-ICPC есть все основания полагать, что Egor опустится в статистике по вкладу. Теперь топ вклада в большей степени отражает активных на текущий момент членов сообщества.

Заодно были сделаны и другие небольшие изменения:

  1. по мотивам обсуждения и старых размышлений было внедрено сокрытие актуальной оценки комментария, если это значение лежит в диапазоне [-5,-1],
  2. в ленте комментариев теперь визуализируется факт голосования,
  3. формулы для пересчета суммы оценок во вклад чуток поменялись, чтобы не было такого, что вам поставили пару плюсов, а вклад уже +50 — теперь всё более гладко,
  4. теперь комментарий становится менее заметным, если оценка меньше -10 (было -5),
  5. теперь комментарий скрывается сообщением о низкой оценке, если оценка меньше -25 (было -10).

Полагаю, что скоро сделаем синхронные изменения к 1-2 и для голосования по топикам.

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

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

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

Добро пожаловать на 2013-2014 CT S01E03: selected problems from 2002 Central European (CEPC 2002) + 2010 Southeast USA Region. Продолжительность тренировки — 5 часов. Тренировка открыта как для команд, так и для индивидуальных участников. После ее окончания вы можете дорешивать задачи тренировки или поучаствовать в ней виртуально, если не смогли принять участие одновременно со всеми. Пожалуйста, участвуйте в тренировке честно.

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

Регистрация на тренировку будет доступна со страницы Тренировки и будет открыта до окончания тренировки. Регистрируя команду, выберите именно тех её членов, кто будет писать тренировку.

Удачи!

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

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

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

Добро пожаловать на 2013-2014 CT S01E02: Extended 2003 ACM-ICPC East Central North America Regional Contest (ECNA 2003). Продолжительность тренировки — 5 часов. Тренировка открыта как для команд, так и для индивидуальных участников. После ее окончания вы можете дорешивать задачи тренировки или поучаствовать в ней виртуально, если не смогли принять участие одновременно со всеми. Пожалуйста, участвуйте в тренировке честно.

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

Регистрация на тренировку доступна со страницы Тренировки и будет открыта до окончания тренировки. Регистрируя команду, выберите именно тех её членов, кто будет писать тренировку.

Удачи!

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

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

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

Добро пожаловать на 2013-2014 CT S01E01: Extended 2000 ACM-ICPC East Central North America Regional Contest (ECNA 2000). Продолжительность тренировки — 5 часов. Тренировка открыта как для команд, так и для индивидуальных участников. После ее окончания вы можете дорешивать задачи тренировки или поучаствовать в ней виртуально, если не смогли принять участие одновременно со всеми. Пожалуйста, участвуйте в тренировке честно.

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

Удачи!

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

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

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

Совсем скоро стартует новый сезон командного студенческого чемпионата ACM-ICPC. Например, регистрация на Южный (Саратовский) Четвертьфинал уже открыта. Уверен, среди участников соревнований Codeforces полно тех, кто будет участвовать в ACM-ICPC в этом году.

Чтобы не было мучительно больно за бесцельно прожитые годы, мы открываем серию еженедельных тренировок на Codeforces. Конечно, они будут проходить в рамках Codeforces::Тренировки. Приглашаются все желающие!

Время старта тренировок — примерно 16:10 еженедельно по средам (московское время). В качестве тренировок будут использованы задачи различных соревнований прошлых лет. В дополнение к здравому смыслу несколько простых правил:

  • Мы не будем публиковать до старта тренировки источник задач, прошу решать задачи честно и самостоятельно. В случае использования чужих решений или какого-то другого чита – будем дисквалифицировать. Не хотите тренироваться сами – не тренируйтесь, а портить тренировки другим нельзя.
  • Давайте не будем обсуждать задачи до окончания тренировки.
  • Мы редко будем давать ответы на вопросы по задачам. Если вы нашли какой-то явный баг, то дайте нам знать — исправим, сделаем рассылку с информацией о правке.
  • Если у вас есть тренерский аккаунт (и вы не участник тренировок), то будем рады помощи.
  • Регистрируйтесь на тренировку вашим актуальным составом тех членов команды, кто участвует в ней.
  • Иногда я буду просить кого-то из жюри прошедших соревнований или тренеров других вузов помочь с подготовкой или поделиться материалами – надеюсь на ваше понимание и помощь!
  • Если вы уже решали эти задачи, то либо переключитесь на другую тренировку, либо сообщите об этом через форму вопросов по задачам и вас переведут на внеконкурсное участие.

Первая тренировка 2013-2014 CT S01E01: Extended 2000 ACM-ICPC East Central North America Regional Contest (ECNA 2000) состоится 11-го сентября, примерно в 16:10.

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

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

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

С помощью нескольких опытных и уважаемых членов сообщества (спасибо!) было сформулировано правило, разрешающее использовать сторонний код при выполнении определенных условий. Внимательно ознакомьтесь с текстом.

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

Решения и генераторы могут содержать код, чьим автором являетесь не вы, только в двух случаях:

  1. этот код был написан и опубликован/распространен строго до начала раунда,
  2. этот код сгенерирован с помощью инструментов, которые были написаны и опубликованы/распространены строго до начала раунда.

Любое использование стороннего кода не должно нарушать лицензий или авторских прав третьих лиц. Помните, что даже выложенный в открытом доступе код не всегда является свободным! По требованию правообладателя код, нарушающий лицензию или авторские права, может быть признан нарушающим правила.

В случае внесения изменений в код из пунктов 1) и/или 2) все эти изменения должны быть сделаны исключительно лично вами.

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

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

Например, этому правилу соответствует использование кода с сайта http://e-maxx.ru/ или из Wikipedia (если код был написан и опубликован/распространен строго до начала раунда). Соответствие правилам использования в этом случае легко проверяется с помощью кэшей поисковых систем. Аналогично, допустимо использование кода из книги/статьи, опубликованной до контеста. С другой стороны, использование внутрикомандных заготовок (например, для финала ACM-ICPC) недопустимо, если не существует надежного и объективного способа доказательства времени написания этого кода.

Это правило ни в коей мере не послабляет запрет на общение, обсуждения или какую-либо другую форму коммуникации между участниками на любые темы, имеющие отношения к задачам, во время раунда.

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

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