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

Всем привет!

Напоминаю, что 3 апреля в 12:00 начнется квалификационный раунд Открытого чемпионата Москвы и МО по программированию (КРОК).

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

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

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

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

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

UPD: Соревнование закончено! Спасибо за участие. В скором времени будут удалены нарушители порядка и результаты станут официальными. Неофициально — проходной балл в Раунд 1 составляет 1950 баллов.

UPD 2: Из таблицы результатов были удалены явные читеры и люди, кому не исполнилось 18 лет на момент регистрации. Если ваши результаты были удалены по ошибке, свяжитесь со мной для прояснения ситуации. Теперь проходной балл составляет 1900 баллов.

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

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

Вторая часть текста чуть более чем полностью совпадает с анонсом аналогичного раунда VK cup :)

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +32 Проголосовать: не нравится

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

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

И -50 за пересабмит, все так же? Надо быть осторожным, а то попытка одна и можно не попасть в 1000.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I am getting a message like 'Only Championship registered users are allowed to participate in this round'..

»
14 лет назад, скрыть # |
Rev. 4  
Проголосовать: нравится -15 Проголосовать: не нравится

Will the contest be unrated?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Sir, What should I do to register in the Championship,please?I register in the contest in http://mirror.codeforces.com/contests,but I failed.

»
14 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится -21 Проголосовать: не нравится

rated?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +17 Проголосовать: не нравится

WTF???

Стоимость задач падает?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Не получается задать вопрос, говорит "Поле должно содержать не более 1,000 символов", хотя оно, очевидно, содержит меньше 1000 символов.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

"The Qualification Round has no hacks or decreasing values of the problems." But the value is decreasing...

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +16 Проголосовать: не нравится

"The Qualification Round has no hacks or decreasing values of the problems." Somehow it is contradicted in the contest. I just got 960 for the first submission of A :)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +13 Проголосовать: не нравится

Hi, I registered at the site, but can't participate in the contest since registration is cloesd. Is this intended?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +16 Проголосовать: не нравится

"Contestants who gain a score equal to the 1000-th place finisher score or greater will advance to the Round 1 (also you need to gain positive score)"

If there are fewer than 1000 participants does that mean that as long as you get a positive score, you can proceed to the next round? =D

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -14 Проголосовать: не нравится

А то, что за не прохождение 1 претеста по причине WA не снимают баллы — это нормально?

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Не дает посылать задачи и говорит: "Для просмотра страницы вы должны быть зарегистрированы на соревнование". Регистрация мной была проведена! Что нужно сделать?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

Написал 4 задачи из поезда с пропадающей сетью на айфоне (да, мсье знает толк :) ). Обнаружил проблему — с сафари при попытке отправить решение лезет ошибка упс что то сломалось... Благо опера была, из нее все норм.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

It seems that not so many people participate in this contest.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -12 Проголосовать: не нравится

Повторите достижение Перельманова

Отказаться от миллиона надо?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

how to cancel our registration in croc? i didn't read the text carefully and didn't notice you must be at least 18 to participate. What shall I do?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

как нормально решать D? сунул прекальк для чисел вида 10000к.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

Задача Е: какой ответ на тест

<a><b><b><a><b><b></b></b></a></b></b></a>
1
a b b

?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

how did you solve problem E ???

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +20 Проголосовать: не нравится

what's up with system test?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +9 Проголосовать: не нравится

When system testing is start??

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

что–то маленький проходной в этот раз вышел...

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

Почему не работают всплывающие окна с информацией о том на каком тесте упало, и прочей инфой?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Моя задача E не прошла тесты. Как вы считаете, ущербен ли в целом подход?

Вначале я составляю дерево BTHML-тэгов. Значение каждого узла дерева равно имени тэга, а его потомки — вложенные в него тэги. Корневой тэг имеет значение nil. Затем при считывании BCSS-правила оно в виде массива имён элементов упаковывается в массив (т.е., идёт массив, элементом которого является массив строк) и отправляется в дерево на разбор по следующему алгоритму:

1). Результат := 0.
2). Перебираем все элементы массива правил BCSS:
- Если значение узла равно первому элементу массива, то создаётся копия массива без первого элемента.
- Если эта копия пуста (разобрано всё правило BCSS), то Результат++.
- Иначе добавить эту копию к массиву правил bcss.
3). Если у элемента нет потомков, то вернуть Результат.
4). Иначе вернуть Результат + сумму результатов разбора массива правил всеми поддеревьями.

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    я также хотел ее решать. Но реализовывать заколебался... к тому же по времени не прошло бы... Есть еще 2 мысли: 1) с помощью регулярок попробовать 2) попробовать прикрутить Карпа... эти 2 мысли я только в голове прокрутил и что-то тоже не особо ... Вообще было бы не плохо увидеть разбор задач от людей которые решили ее

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Милль пардон, есть ли способ узнать, почему программа не прошла окончательное тестирование: по времени или из-за неверного ответа?..

      • »
        »
        »
        »
        14 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +1 Проголосовать: не нравится

        Есть. В своём профиле смотрите вкладку "попытки", нажимая в левом столбце на номер отправки увидите своё решение и там же отыщите тест, на котором программа свалилась. Из таблицы решения почему-то последние дни не открываются.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

как правильно решалась B?

  • »
    »
    14 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

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

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      разве число не может более одного раза входить в период?

      • »
        »
        »
        »
        14 лет назад, скрыть # ^ |
         
        Проголосовать: нравится -6 Проголосовать: не нравится

        кстати, да... вопрос в "кассу" я генерил последовательность до получения постоянного периода. Т.е. как минимум 3 раза должно появиться нужное число + период между 1-2 и 2-3 должен совпадать и быть минимальным.

        • »
          »
          »
          »
          »
          14 лет назад, скрыть # ^ |
          Rev. 2  
          Проголосовать: нравится 0 Проголосовать: не нравится

          Это лишняя работа. Период между 1-2 и 2-3 всегда будет одинаковым, так как это будут одинаковые последовательности, т.к. вся последовательность зависит только от начального элемента.

  • »
    »
    14 лет назад, скрыть # ^ |
    Rev. 3  
    Проголосовать: нравится 0 Проголосовать: не нравится

    разобрался. генерируем m+1 число. по принципу Дирихле m+1 всегда совпадет с одним из m предыдущих чисел. выводим разницу их номеров.

  • »
    »
    14 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится +1 Проголосовать: не нравится

    Один из вариантов: Храним на какой позиции в последовательности последний раз хранилось то или иное число. Затем подсчитываем следующее число последовательности и проверяем, встречалось ли оно до этого. Если да, то ответ — (текущая позиция) - (позиция последнего вхождения этого числа). Так как последовательность всегда зацикливается (из условия), то ответ мы всегда найдем.

    int c = r,
        t = 1;
    while (true) {
    	if (p[c]) {
    		cout << t - p[c];
    		return;
    	}
    	p[c] = t++;
    	c = (a * c + b) % m;
    }
    

    Это первое, что приходит в голову :)

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +1 Проголосовать: не нравится

In problem E, can someone explain me why the answer for the following case is '3' ?

<hnhi><ihjhi><ihjhi></ihjhi></ihjhi><hnhi/></hnhi><h><hnhi><hnhi><ihjhi></ihjhi></hnhi></hnhi><ihjhi></ihjhi></h> 1 hnhi ihjhi

»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Как делать пследнюю задачу, подскажите?

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -8 Проголосовать: не нравится

А это рейтинговый контест или нет? Что-то рейтинг никак не обновляется

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +3 Проголосовать: не нравится

    нет

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +6 Проголосовать: не нравится

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

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Как правильно решалась C?

»
14 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится 0 Проголосовать: не нравится

Считаю интересным ТЛ по задаче E. TL 8 секунд, если вы не заметили. Увидя такой большой ТЛ я побоялся и написал задачу очень аккуратно, оптимизировано. В итоге моё решение отработало за 270 мс :). Конечно это такое же лобовое решение за N * M. Основные оптимизации это

1) Конвертация 10-символьных строк в int64 с помощью сдвигов на 5 бит и прибавления номера буквы 'a' — 1, 'b' — 2.
2) Один DFS с циклом внутри по всем запросам.
3) Самописные списки смежности, без векторов.

ТЛ сделали с запасом, я аж испугался :)

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    А у меня 7580 мс, если память не изменяет :)

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Можно узнать назначение функции ASS?

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +8 Проголосовать: не нравится

      [:||||:]

      Это assert

    • »
      »
      »
      14 лет назад, скрыть # ^ |
      Rev. 4  
      Проголосовать: нравится +5 Проголосовать: не нравится

      Она вызывает Runtime Error — Ошибку времени исполнения. Иногда полезно проверять условия в которых твоя программа работает. Например в процессе решения задачи ты оценил, что количество неких интересных чисел не может быть больше 1000, и на этом строишь своё решение. Я в таком случае после генерации этих чисел добавлю ASS(n <= MAX_N) и увидев Runtime Error подумаю, что ошибка в этом. Чтобы убедиться что сработал именно ASSERT можно изменить логику этой функции и вызывать к примеру TL, тогда следующим сабмитом ты будешь знать на 100% в чем ошибка. В приведенном примере я получу рантайм уже тестируя на сэмплах, но надеюсь назначение теперь более понятно.
      ЗЫ: кроме того функция написана так, что в ней удобно ставить breakpoint во время дебага я часто этим пользуюсь и делаю что-то вроде ASS(x == 3 && y == 42); в нужных условиях программа падает и смотрю что на стеке, в переменных, почему мы сюда пришли...
      А еще как-то этот замечательный код ++(int*)0 перекочевал в release программы на работе. Юзеры были очень рады.

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    m,n в задаче оба до 200, так что ты вероятно все же имел ввиду длину*m

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

  • »
    »
    14 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    А зачем списки смежности? Чушь спросил.

    • »
      »
      »
      14 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

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

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -17 Проголосовать: не нравится

В задаче про маршрутку надо массив из 10000000 элементов. В pascal не возможно его создать. Там через списки или есть более красивое решение???

»
14 лет назад, скрыть # |
 
Проголосовать: нравится -13 Проголосовать: не нравится

Сколько участников проходит в Round 2?

  • »
    »
    14 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится +12 Проголосовать: не нравится

    3-4 апреля (с 12:00 03.04 по 12:00 04.04) — квалификационный тур (дистанционный), в первый раунд проходят 1000 участников,
    6 апреля (19:00-21:00) — первый раунд отборочного тура (дистанционный), во второй раунд выходят 300 участников,
    20 апреля (19:00-21:00) — второй раунд отборочного тура (дистанционный), в финал выходят 50 участников,
    27 апреля — финал (очный, в офисе компании КРОК)

    Ссылка на анонс(не меньше чем третья на этой странице)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +9 Проголосовать: не нравится

Весело будет тем из заграницы кто пройдёт на финальный этап за 7 дней визу сделать :)

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Will Round 1 be rated or not? There is no article announcing it.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Will there be hacks in round 1? thanks

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +7 Проголосовать: не нравится

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