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

149A - Командировка

Во-первых, ясно, что если сумма всех чисел ai меньше, чем k, то Петя в любом случае не сумеет вырастить цветок до нужной высоты, и следует вывести <<-1>>.

Во-вторых, несложно понять, что если мы хотим выбрать один месяц из двух, в который мы будем поливать цветок, то выгодно выбирать тот, где число ai максимально. Таким образом, решение задачи очень просто: следует брать месяцы в порядке убывания чисел ai и в эти месяцы поливать цветы. Как только сумма набранных ai станет больше или равна k — следует прекратить процесс, ответ найден.

149B - Марсианские часы

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

До какой величины следует перебирать основание? На самом деле, достаточно до 60, потому что 60 – верхнее ограничение на допустимые числа. Это следует из того, что если число в неизвестной системе счисления состоит из одного знака, то ее значение в десятичной не меняется никогда, а иначе его значение не меньше основания.

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

149C - Разделение на команды

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

Первые два требования очевидно выполняются.

Для доказательства третьего рассмотрим геометрическое представление: пусть каждый мальчик обозначается точкой на оси X со значением, равным его умению играть. Соединим отрезками точки с номерами 1 и 2, 3 и 4, и так далее. Если n нечетно, то соединим эту точку с ближайшей предыдущей.

Очевидно, что все эти отрезки попарно пересекаются разве что в точках, а суммарная их длина равна разности сумм умений играть мальчиков, входящих в первую команду и во вторую команду. Также очевидно, что все эти отрезки полностью содержатся в отрезке [0, max(ai)], а так как попарно имеют нулевую длину пересечения, то третье требование выполняется, что мы и доказали.

149D - Раскрашивание скобок

Введем обозначения цветов: 0 – черный, 1 – красный, 2 – синий. Заметим, что у отдельно взятой пары скобок всего 4 варианта раскраски: 0-1, 1-0, 0-2, 2-0.

Рассмотрим динамическое программирование, где состояние имеет вид – (l, r, cl, cr), где пара (l, r) задает одну из пар скобок, а сl и cr означают фиксированные для них цвета. Значением динамики является количество способов раскрасить все скобочки внутри отрезка (l, r) с соблюдением всех условий.

Выпишем все пары скобок, которые вложены непосредственно в пару (l, r), пусть их k штук. Причем, будем рассматривать только первый уровень вложенности, именно непосредственно вложенные. Для того, чтобы подсчитать значение динамики для состояния, внутри этого состояния будем подсчитывать еще одну динамику, где состояние – это пара (i, c) которое означает количество правильных раскрасок первых i непосредственно вложенных скобок и всех внутри них, если последняя закрывающая скобка имеет цвет c. Пересчитывать такую динамику вперед очень просто – попробуем раскрасить (i + 1)-ую скобочку в один из четырех вариантов, учитывая возможные конфликты. У такой динамики начальным состоянием является пара (0, cl), а итоговый результат – сумма по состояниям вида (k, c), где c не должно конфликтовать с cr.

Ответ на всю задачу считается аналогично внутренней динамике. Асимптотика решения – O(n2) с коэффициентом порядка 12.

149E - Марсианские строки

Будем решать задачу отдельно для каждой из m строк. Итак, пусть у нас есть строка p, ее длина l, и нам нужно проверить, может ли марсианин ее увидеть.

Введем дополнительные массивы: пусть pref[i] – минимальная позиция в s начала вхождения префикса строки p длиной ровно i, а также пусть suff[j] – максимальная позиция в s конца вхождения суффикса строки p длиной ровно j.

Нетрудно понять, что марсианин сможет увидеть p, если существует такое i, что suff[l - i] ≥ pref[i] + l–1.

Как подсчитать массивы? Для массива pref достаточно найти Z-функцию строки p#s, а для массива suff – Z-функцию строки r(p)#r(s), где r(t) означает перевернутую строку t. Используя массив Z-функций значения массивов suff и pref подсчитать тривиально.

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

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

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

Привет всем!

Сегодня состоится 106-й рейтинговый раунд Codeforces для участников Div 2. В нем могут принять участие все желающие. Вам представится возможность вместе с Петей отдохнуть от родителей, узнать несколько интересных фактов о марсианах и конечно порешать, как мы надеемся, интересные задачи для вас.

Этот раунд подготовлен командой из трех человек: Gerald, NALP и Polichka. Мы выражаем огромную благодарность за помощь в подготовке раунда и переводе задач Артему Рахову (RAD), Михаилу Мирзаянову (MikeMirzayanov) и Марии Беловой (Delinur).

Распределение баллов за задачи: 500-1000-1500-2500-2500.

Всем удачи и высокого рейтинга!

UPD: Разбор задач

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

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

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

На днях на сайте Quora меня попросили ответить на вопрос "What is it like to be a problem writer for programming competitions?". Первым пришел в голову ответ из одного слова, потом подтянулся более развернутый, потом вспомнилась очень характерная история, хм, и еще об этом нужно бы упомянуть... На второй странице я поняла, что это уже не ответ, а полноценная статья, а на третьей — решила поделиться этим шедевром с подготовленной аудиторией, то есть с вами.

Итак, каково же это — писать задачи для соревнований по программированию?

Если одним словом (да-да, тем самым, которое первая мысль), то "здорово". Если чуть подробнее, то "тяжелое, иногда неблагодарное, но все равно увлекательное занятие". Если еще подробнее...

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

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

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

Итак, разбор задач. Сразу уточню, что задачу MikeMirzayanov не угадал никто (неплохо мы замаскировались, а?) — это была задача C про переборчивую корыстолюбивую принцессу. Собственно, с этой задачи раунд и начался, все остальные я придумала уже для продолжения темы.

148A - Средство от бессонницы

Общее количество драконов D может быть достаточно небольшим, поэтому задачу можно решать без затей, перебором драконов от 1 до D и проверкой каждого дракона отдельно. Сложность решения — O(D).

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

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

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

Приветствую,

Завтра, а местами уже сегодня (2 февраля в 20:00 по московскому времени) состоится Codeforces Round #105 для второго дивизиона.

Любите ли вы сказки? Нет, любите ли вы мои сказки так, как люблю их я? Если да, то вам обязательно понравится! Если нет, надеюсь, что тоже понравится.

В этом раунде мы решили провести эксперимент по сглаживанию неравномерностей в оценке сложности задач их авторами: все задачи будут оценены в 1000 баллов. Мы постарались расположить задачи примерно по возрастанию сложности, но дело это сугубо субъективное, так что сюрпризы не исключены.

Спасибо MikeMirzayanov за пожертвованную задачу (кто угадает, которую из пяти?) и RAD за помощь в подготовке задач.

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

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

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

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

Всем привет!

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

Трансляция этой олимпиады пройдет на Codeforces::Тренировках ровно в это же время — во вторник, 31 января в 15:00 по Московскому времени (время в других регионах). Олимпиада будет проводиться по правилам ACM, но всего 3 часа. Т.к. я заранее не знал уровень участников, я постарался сделать олимпиаду интересной как для новичков, которые знают только основы одного из языков программирования, так и для более опытных олимпиадников, которые получили бы примерно синий или даже фиолетовый рейтинг на Codeforces. Т.к. олимпиаду готовлю я один в течение недели, глюки вполне возможны, прошу отнестись с пониманием.

Удачи всем, кто решит участвовать.

Алексей freopen Золотов

UPD. Если кому-то интересно, что происходит, примерно в 0:50 по времени контеста пропали все invokeры, которые проверяют решение. Я не могу что-то поправить и не могу даже узнать, почему это произошло. Надеюсь, что скоро починят. Простите за испорченный вечер и пропущенный SRM.

UPD2. Ссылка на разбор задач олимпиады. Еще более простое решение G.

UPD3. Поздравим sankear, который примерно за час решил все задачи олимпиады.

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

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

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

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

Теперь мы используем вариант Markdown в качестве языка разметки для публикации постов в блог и комментариев (позже будет в личных сообщениях и, вообще, всюду). Так как мы используем дополнительные расширения, то разметку мы называем просто Codeforces Markup. Расширения Codeforces можно подглядеть в редакторе, описание остальных я опубликую здесь чуть позже. В Codeforces Markup менее навороченный синтаксис спец. тегов — двойные квадратные скобки заменены на одинарные (например, [problem:11A], [user:Petr], а можно так ~Petr).

Кроме того, улучшена типографика постов и комментариев.

Посмотреть описание Markdown можно по ссылкам:

Вот короткий список возможностей:

  1. вставка хэндла пользователя (по короткому тегу вида ~tourist);
  2. курсив и жирный текст (*курсив* и **жирный текст**);
  3. код внутри строки — return a == 0 ? b : gcd(b % a, a); (поместите код между символами `);
  4. ненумерованные, нумерованные и вложенные списки;
  5. заголовки;
  6. автозамена дефисов на тире (эвристика);
  7. автовставка ссылки по адресу, пример: http://codeforces.me/;
  8. таблицы и изображения;
  9. подсветка кода;
  10. "умная" расстановка кавычек;
  11. абзацы разделяются пустой строкой, переводы строк игнорируются;
  12. спец. теги Codeforces;
  13. значительно улучшено распознавание формул, можно писать "с вас $2";
  14. и многое другое!

Несколько примеров использования тегов Codeforces:

исходный код результат
~Ripatti - Лучший автор задач 2011 - Ripatti — Лучший автор задач 2011
[user:tourist] - лидер рейтинга tourist — лидер рейтинга
[problem:125E] - задача на графы, решите [problem:125E,ее] 125E - Компания MST — задача на графы, решите ее
результаты [contest:125] доступны по [standings:125,ссылке] результаты Codeforces Testing Round 2 доступны по ссылке
решение [problem:125E] - [submission:912139] решение 125E - Компания MST912139
[photoalbum:PicasaPublicAlbumURL] симпатично вставляет фотографии из альбома

Напоминаю, что на Codeforces реализован предпросмотр, так что не надо сумасшедших экспериментов по изучению Markdown в комментариях :)

MikeMirzayanov

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

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

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

27-го января были подведены итоги и награждены лауреаты. Ими стали:


tourist — лучший участник 2011

Ripatti — лучший автор задач 2011

Alex_KPR — лучший блоггер 2011
  • Лучший участник Codeforces 2011 года: Геннадий tourist Короткевич. Было произведен пересчет рейтинга, учитывая только раунды 2011 года. Геннадий возглавил таблицу результатов с существенным отрывом! По ссылке вы можете ознакомиться с его успехами на соревнованиях Codeforces.
  • Лучший автор задач Codeforces 2011 года: Артем Ripatti Рипатти. В 2011 году Артем подготовил и провел на Codeforces около 10 раундов, зарекомендовал себя не только как автор интересных задач, но и как ответственный партнер. Мы благодарны Артему за оказанную проекту помощь и надеемся на дальнейшее сотрудничество.
  • Лучший блоггер Codeforces 2011 года: Александр Alex_KPR Куприн. Блог Александра регулярно радовал читателей интересными статьями. Его отчеты о Russian Code Cup, финале ACM-ICPC, Петрозаводских сборах вызвали интерес не только у постоянных читателей, но и привлекли новых. Спасибо!
Проект Codeforces благодарит все участников, авторов статей за проявленный интерес, но особенное спасибо мы говорим всем авторам задач!

В блоге Петра Petr Митричева есть видео с награждения. Петр, спасибо!

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

Mike,

My apologies for the delay in responding. It has been an exceptionally busy term for me, teaching our new introductory course in Python (I'm learning the language along with my students), supervising our senior capstone project course, and chairing our department. You may post the following statement on your website:

Congratulations to Gennady "tourist" Korotkyevich (Best Codeforces Participant 2011), Artem Ripatti (Best Codeforces Problem Writer 2011), and Alexander "Alex_KPR" Kouprin (Best Codeforces Blogger 2011). Although Mike Mirzayanov hinted that we might be in for a change this year, I was not too surprised to see that "tourist" took the top participant spot once again. I applaud the winners and everyone else who takes part in Codeforces.

Tom Cormen
Professor and Chair
Dartmouth College Department of Computer Science
http://www.cs.dartmouth.edu/~thc/
Twitter: @thcormen

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

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

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

(Это перевод оригинального текста, пожалуйста, старайтесь использовать английский в комментариях) 

Всем привет.

Пока на Codeforces нет раундов, я подготовил тренировочное соревнование в новом проекте Codeforces::Тренировки. Будут использованы задачи с прошедшего в Стэнфорде контеста, который я помогал проводить в конце октября. Для нас этот контест был отборочным на полуфинал соревнования ACM-ICPC. Задачи будут сильно различаться по сложности, каждый найдет для себя что-нибудь интересное.

Контест начнется в субботу, 28 января 2012 в 08:00 утра (московское время). Продолжительность - 4 часа. Надеюсь, что вам понравятся задачи!

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

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

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

Не так давно в английскую Википедиа была добавлена статья о Петре Митричеве (Petr). В настоящее время идет обсуждение этой статьи на предмет удаления по причине недостаточной значимости. Вот цитата из обсуждения "I don't see how Petr is notable in Wikipedia standards. What makes him different from the hundreds or maybe even thousands of others who are on a similar level as him at competitive programming?".

Кстати, вот статья о выдающемся олимпиаднике из Штатов Рейде Бартоне. Кто для истории более ценен?

Было бы здорово, если те кто вник в правила Википедиа высказались бы в обсуждении в поддержу статьи о Петре.

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

Комментарии?

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

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