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

Всем привет!

Напоминаю, что 9 марта в 12:00 начнется второй квалификационный раунд чемпионата VK Cup 2012.

Это последний шанс пройти в Раунд 1. В Раунд 1 проходят все участники, набравшие не меньше баллов, чем участник на 800-ом месте. Вас ждет несколько несложных задач, примерно расположенных по возрастанию сложности. Во время квалификации задачи тестируются системой только на претестах, а системное тестирование состоится после окончания квалификации (которая идет сутки). Претесты не покрывают все возможные случаи входных данных, так что тщательно тестируйте свои программы! Взломов, падения стоимости задач во время квалификации нет.

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

До окончания раунда категорически запрещается публиковать где-либо условия задач/решения/какие-либо мысли и соображения о них. Запрещено общаться на тему задач, обсуждать условия и проч. Будьте честными и пусть в Раунд 1 пройдут сильнейшие. Когда квалификация будет завершена, можно будет обсуждать задачи и решения.

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

Желаем удачи и удовольствия от решения задач!

UPD: Тестирование завершено, проходной балл равен 3500 3450. Поздравляем всех, кто прошел в Раунд 1!

UPD 2: Мы удалили явных читеров и проходной балл уменьшился до 3450!

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

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

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

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

Рады приветствовать вас на очередном раунде Codeforces для участников Div. 2, в котором традиционно могут участвовать все желающие.

Задачи для вас подготовили Холкин Павел (HolkinPV), Рахов Артем (RAD) и Николай Кузнецов (NALP). Выражаем свою благодарность Михаилу Мирзаянову (MikeMirzayanov) за прекрасную систему, Марии Беловой (Delinur) за перевод условий, а также Агапову Геральду (Gerald) и Куприну Александру (Alex_KPR) за помощь.

Откроем небольшой секрет по поводу сегодняшних задач. Для их решения вам скорее всего понадобятся сортировки)

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

Всем участникам желаем успехов и высокого рейтинга!

UPD: Соревнование закончено. Разбор задач можно найти здесь.

UPD2: Всем большое спасибо за участие. Надеемся задачи вам понравились. Поздравляем победителей:

  1. Touma_Kazusa
  2. ZJUT_AA
  3. wwhd
  4. jikwao425
  5. wtiger9999
  6. Jolin
  7. anmtcel
  8. marspeople
  9. ztxz16
  10. CrazyRabbit

Отдельное поздравление участнику Touma_Kazusa, который справился со всеми задачами.

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

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

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

Всем привет!

Напоминаю, что 4 марта в 00:00 начнется первый квалификационный раунд чемпионата VK Cup 2012.

Чтобы пройти в Раунд 1 вам надо принять участие хотя бы в одной квалификации. Из каждой квалификации в Раунд 1 проходят все участники, набравшие не меньше баллов, чем участник на 800-ом месте. Если вы не будете участвовать в первой квалификации или не прошли по ее результатам в Раунд 1, то не беда — вы можете попробовать силы во второй квалификации.

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

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

До окончания раунда категорически запрещается публиковать где-либо условия задач/решения/какие-либо мысли и соображения о них. Запрещено общаться на тему задач, обсуждать условия и проч. Будьте честными и пусть в Раунд 1 пройдут сильнейшие. Когда квалификация будет завершена, можно будет обсуждать задачи и решения.

Зарегистрироваться на раунд можно в любое время вплоть до его окончания. Да, у нас был фальстарт с регистрацией на квалификацию. Не была включена функция проверки регистрации участника в Чемпионате. Если кто-то успел 2-го марта пройти регистрацию на раунд, то сделайте это повторно.

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

Желаем удачи и удовольствия от решения задач!

UPD: Раунд завершен. 12907 попыток ожидают системного тестирования!

UPD 2: Тестирование завершено, доступны результаты.

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

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

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

Здравствуйте!

Приглашаю Вас принять участие в сегодняшнем раунде, который кстати, будет последней возможностью на Codeforces потренироваться перед VK Cup, так что не упустите свой шанс =) Надеюсь, каждый найдет интересные для него задачи, у Вас не наступит взаимонепонимание с условиями и Ваши решения будут находится в полной гармонии с нашими тестами =)

Автор сегодняшнего раунда я, Валерий Самойлов, выпускник СПбГУ. Большое спасибо за помощь в подготовке задач Артёму Рахову (RAD) и Геральду Агапову (Gerald) (которому, кстати, был посвещён мой первый раунд: Codeforces Beta Round 79 (Div. 1 Only)) =)

Так же большое спасибо Марии Беловой за перевод условий и Александру Куприну (Alex_KPR) за вычитку условий и картинку =)

Обратите внимание, что в первом дивизионе разбалловка задач сегодня необычная:

500 — 1000 — 1500 — 2500 — 2500

Во втором дивизионе же такая же, как всегда:

500 — 1000 — 1500 — 2000 — 2500

Всем удачи!

По техническим причинам раунд отложен на полчаса. Регистрация закончится в 21:25.

Поздравляем победителей!

Первый дивизион:

  1. tourist

  2. yeputons

  3. YuukaKazami

  4. KADR

  5. rng_58

  6. vepifanov

  7. shangjingbo

  8. Shef

  9. bjin

  10. SirShokoladina

Второй дивизион:

  1. Ilya_MSU

  2. stoyanovd

  3. Kh.Madi

Опубликован полный разбор на русском.

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

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

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

Чемпионат

Чемпионат VK Cup — это открытый чемпионат по программированию, проводимый компанией ВКонтакте, проектом Codeforces и Саратовским государственным университетом. Финал чемпионата пройдет в июле в Санкт-Петербурге. Лучшие 50 участников по результатам третьего отборочного раунда будут приглашены на финал соревнования. Расходы по проезду и проживанию берут на себя организаторы чемпионата.

Участники

Вы молоды и любите решать задачи по программированию? Этот чемпионат для вас! Участником чемпионата может стать любой желающий, кто удовлетворяет следующим требованиям:

  • возраст не менее 14 и не более 23 полных лет на момент регистрации;
  • не является сотрудником компании ВКонтакте и/или членом оргкомитета или жюри чемпионата;
  • не является дисквалифицированным членом сообщества Codeforces.

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

Соревнование индивидуальное, участие в какой-либо коллективной форме не допускается.

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

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

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

Ну что, делимся впечатлениями, признаемся, кто участвовал, в какой команде и что нарешал? Ужасно не хватает более детальной информации по контесту — стран участников и общего балла явно недостаточно :-)

Список команд:

Место Команда Состав
1 Havka-papstvo Egor, Petr, pashka
4 Charles_University_Legion fhlasek, Mimino, k21
5 Progopedia maksay, kit1980, Nickolas
8 Unpretired Michael, ilyakor, Василий Астахов
9 DrinkLess arseny30, valich, levlam
13 _NiN_ ashmelev, mmatrosov, Антон Демидов
14 Saratov.SU2.Retired ralekseenkov, ivanromanov, Igor Kulkin
16 petrsu_ginger Eledven, zurg, Jughead
18 despise_oimaster sevenkplus, wuzhengkai, Zekun Ni
20 any_random Zhukov_Dmitry, zeliboba, ifsmirnov
22 PigsAndHedgehogs Joshik, andrewzta, dgozman
27 Accept_iterator asaveljevs, ulzha, visockas
33 PMP_Forever poopi, Mohammad_JRS, piloop
34 KNURE_Team SkorKNURE, DryukAlex, Daiver19
36 LT_United Leonid, KrK, Lomir

И немного впечатлений от Progopedia в моем лице.

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

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

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

Всем привет. Меня зовут Михаил Тихомиров, и сегодня я — автор раунда. При подготовке задач мне очень помогли Геральд Агапов (Gerald) и Артем Рахов (RAD), условия на английский язык перевела Мария Белова (Delinur), за что им от меня огромное спасибо.

Сегодняшний раунд пишут участники из обоих дивизионов. В каждом дивизионе пять задач, задачки будут пересекаться, в общем, все как всегда. Разбалловка задач в каждом дивизионе сегодня также стандартная (500-1000-1500-2000-2500). В общем, самый обыкновенный раунд. Или нет?.. =)

Надеюсь, что задачки будут интересными, тесты — надежными, сервер — быстрым, решения — (в основном) правильными, а раунд — рейтинговым. =) Желаю всем удачного выступления!

Раунд завершился, всем спасибо!

Результаты:

div1:

  1. tourist
  2. peter50216
  3. Egor
  4. YuukaKazami
  5. gchebanov
  6. kelvin
  7. shangjingbo
  8. rowdark
  9. kterry
  10. rng_58

div2:

  1. jonathanasdf
  2. Tranvick
  3. ProForward
  4. Eurekash
  5. neex.emil

Теперь полный разбор здесь.

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

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

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

Итак, разбор задач. Я старалась подбирать задачи так, чтобы каждая из них раскрывала какой-то аспект языка — особенность или часто используемый глагол. Если участник его узнавал/нагугливал, задача должна была стать очевидной.

153A - A + B

Сразу скажу, что приведенный в посте пример работет и в Custom test, и в ideone, и локально — если вводить числа по одному на строку и (внимание!) после второго тоже поставить перевод строки. Этот последний перевод строки не отображается в тестах, но на самом деле он там есть! И для COBOL это важно. Все тесты на Codeforces сгенерированы аккуратно, с переводом строки всюду, где нужно, поэтому при сабмите проблем возникать не должно было.

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

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

Разбор задач Surprise Language Round 5
  • Проголосовать: нравится
  • +34
  • Проголосовать: не нравится

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

Раунд окончен, надеюсь, вам понравилось. Разбор задач здесь.

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

Задача "A+B" (числа A и B заданы в отдельных строках) решается вот так:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SOLUTION.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 A        PIC 9(10)   VALUE ZEROES.
       01 B        PIC 9(10)   VALUE ZEROES.
       01 STR      PIC X(10).

       PROCEDURE DIVISION.
         ACCEPT STR
         MOVE STR TO A
         ACCEPT STR
         MOVE STR TO B
         ADD A TO B
         DISPLAY B
         STOP RUN.

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

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

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

152A - Оценки

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

for (int i = 0; i < n; ++i){   
    bool wasBest = false;
    for(int j = 0; j < m; ++j){
        bool isBest = true;
        for(int k = 0; k < n; ++k)
            if(a[k][j] > a[i][j])
                isBest = false;
        if(isBest)        
            wasBest = true;
    }
    if(wasBest)
        ans++;
}      

152B - Шаги

В этой задаче нужно бюло посчитать формулу — для позиции (x, y) и вектора (dx, dy), сколько шагов до упора может сделать мальчик. Эту же величину можно было считать пользуясь "почти" бинарным поиском. Ниже приведу код вычисления этой величины, написанный RAD.

for (long long cof = 1100000000; cof; cof /= 2)
    while (onField(xc + cof * dx, yc + cof * dy)) {
        xc = xc + cof * dx;
        yc = yc + cof * dy;
        ans += cof;
    }      

152C - Записная книжка

В этой задаче нужно было заметить, что на месте первого имени можно получить любое имя специального вида. А именно, любое имя вида s = s1 s2 s3 s4 ... sm, где s1 — первый символ любого из заданных имен, s2 — второй символ любого из заданных имен, ... smm-й символ любого из заданных имен. Тогда ответ на задачу — это произведение cnti (1 ≤ i ≤ m), где cnti — это количество различных букв стоящих в именах на позиции i.

152D - Рамки

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

Так как у рамок длина стороны была не менее 3, то давайте выделим те x- и y-координаты, на которых встречаются хотя бы 3 подряд идущих символа '#'. Понятно, что координаты углов рамок следует выбирать только из этих выделенных x и y. В общем случае различных выделенных x не более 4, и различных выделенных y не более 4.

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

Например:

#######
#######
#######
#.....#
#######

Первая рамка:

#######
#.....#
#######
.......
.......

Вторая рамка:

.......
#######
#.....#
#.....#
#######

В примере различных y-координат 7.

Аккуратно обработаем такие случаи отдельно, что вполне просто. (Оставим всего 4 y-координаты: минимум, максимум, второй минимум и второй максимум).

Иначе, если количество выделенных x- и y-координат не более 4, то переберем углы первой первой и второй рамки и проверим, что выбранные рамки — корректные рамки и нет лишних символов '#'. Проверка осуществляется за O(n + m) или за O(1) (с использованием частичных сумм).

152E - Сад

Задача решалась динамическим программированием. Пусть dp[mask][v] — это стоимость минимального корректного покрытия бетоном, если мы рассматриваем в качестве важных элементов только элементы маски mask и покрытие дополнительно покрывает вершину v = (i, j) поля.

Есть два вида переходов.

Во-первых мы можем, как бы разрезать покрытие по вершине v. Тогда нужно перебрать подмаску вершин submask, которые уйдут в левое покрытие и сделать соответсвующий переход. Обновить dp[mask][v] значением dp[submask][v] + dp[mask ^ submask][v] - cost(v).

Во-вторых, возможно, в данной вершине v в оптимальном покрытии маски mask, захватывыющим вершину v, нельзя сделать разрез разделяющий множество вершин. В таком случае, эта вершина образует своеобразный <<хвост>>. То есть существует такая вершина u, в которой можно сделать разрез, при этом кратчайший путь из вершины u в v целиком принадлежит оптимальному покрутию. Преподсчитаем заранее кратчайшие пути между всеми парами клеток. Теперь чтобы сделать этот переход, первоначально посчитаем значение динамики dp[mask][v] для всех вершин v только с учетом первого перехода. Теперь можно делать второй переход. Для всех u, dp[mask][v], обновить значением dp[mask][u] + dist(v, u) - cost(u).

Отдельно нужно обработать состояние, в котором ровно один бит в маске, при этом вершина соответсвующая этому биту равна v. В таком случае ответ, понятно, равен cost(v).

Таким образом, каждое получается решение за O(min(3k·n·m, 2k·(n·m)2)).

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

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