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

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

Если вы не спите в час ночи и не знаете чем заняться, то у меня есть для вас хорошие новости. В час ночи 17-го января 2014 г. состоится Testing Round 9, цель которого протестировать хорошенько платформу перед завтрашним раундом. Мы порелизили большое количество внутренних изменений, которые не видны пользователям, но влияют на всевозможную функциональность системы.

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

Если вы видите какие-то изменения в функциональности, то пишите о них в комментариях.

Спасибо.

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

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

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

А интерактивки когда в раундах появятся?

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

    А как их взламывать?

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

      Существуют интерактивки, где это можно реализовать. Например, игра "Угадай число с logN попыток". В инпуте (для интерактора) хранится число, которое надо угадать, это же и будет взломом.

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

      • »
        »
        »
        »
        10 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится -40 Проголосовать: не нравится

        Может быть, 17 хомячков расскажут, что же я не так написал?

        Забавно, сразу же плюсанули.

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

У меня одного рейтинг перестал отображаться ?

АПД. Спасибо :)

»
10 лет назад, # |
  Проголосовать: нравится -22 Проголосовать: не нравится
»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

При регистрации: "Вы регистрируетесь "вне конкурса", причина: рейтинг должен быть от 0 до 1,699 для возможности регистрации на это соревнование".

Хм...?

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

Я может раньше не замечал, но, кажется, страница обновляется сама онлайн

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

it's allowed to know the type of these improvements ? :D

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

    All improvements are relatively deep inside Codeforces system and are mainly made to improve performance. So you won't see anything, except, maybe, faster page loading.

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

Why always Testing rounds are at a very very unusual time?!

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

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

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

the duration changed?

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

Что и старт отложили?

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

Момент номер раз: Не появилось всплывающее окошко, сообщающее о начале раунда. Chrome

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

В комнате, если открыть информацию о чьей-нибудь посылке, а конкретно о взломанной посылке, то сначала написано "Полное решение", потом "Решение взломано". Не помню было ли так раньше, но логичней писать "Претесты пройдены", а не "Полное решение".

UPD: Ну в принципе в общей таблице так же.

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

Первая задача элементарная

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

    Как ее решать, ковбой?

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

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

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

        Да, красиво, я так же решал. Ваше решение можно несколько упростить, если использовать pair<int, int> вместо структуры human. Тогда можно использовать стандартный компаратор, это делает код более лаконичным.

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

          да, достаточно изящно, разобрался, спасибо.

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

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

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

Задача D : Я не умею писать bfs или там что-то другое?

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

А это нормально, что я все еще не могу просматривать решения других участников?

»
10 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Will there be an editorial for this round ?

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

    I am not sure if editorials are written for testing rounds.

    A. 3 main approaches:

    1) Select two indexes of the two biggest values with one loop.

    2) Sort numbers in pairs with their indexes.

    3) Select max index. Then find max value which is different from the previous found.

    B. Sort all numbers and use one loop for l, other for r, then select max(r — l + 1), where a[r] — a[l] <= t. You can use "two pointers" too.

    C. Find the number of substrings which have d <= i (not exactly i), for each i from 0 to 26. Then the exact answer for each i ([1; 26]) is res[i] — res[i — 1]. How to do that? Well, here you could use "two pointers". Keep the number of distinct letters (there are 26 of them, make a small array to keep their counters). Go through all l, then keep extending r if the number of distinct letters is not more than i.

    Adding r: increases the number of distinct letters if the counter of this letter was 0.

    Leaving l: decreases the number of distinct letters if the counter of this letter becomes 0.

    D. Use BFS where the positions are defined as the indexes of taken vertices. For each member in the triple try to change its location (if the colors are the same as it is said in the statement). Let's remember which member we have changed as well as its old value. We break from BFS if we dequeue a triple which when it is sorted gives (1, 2, 3). We can restore the path from the end to the beginning recursively.

    For details look into my solutions.

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

can any one explain how to solve problem C ? i don't think there will be tutorial for this 'Testing' round .

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

    I have 26 counters (one for each possible k) and a vector with the last position for each c, updating this vector for each char of the string.

    Example: For "abacd" at char "d" the vector will be:

    (a, 3) (b, 1) (c, 2) (d, 4)

    If you sort by the second element in decreasing order

    (d, 4) (a, 3) (c, 2) (b, 1)

    You are at char 4 right now. From the vector you know that the range from 4 to 3+1 belongs to k=1, from 3 to 2+1 to k=2, from 2 to 1+1 to k=3 and the rest to k=4.

    The cost is O(26*size of the string)

    My solution failed during the final tests because I was printing at the only up to K=25 :(

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

      i read your solution ant got it :) thanks !

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

      Wow, very nice, I unnecessarily complicated it.

      When processing the ith character, I found the last occurence of that character(like you did) and had a list of prefix sums as to the number of occurences of each character upto that special character(these diversities do not change). And then, I modified the new diversities like you did. And to top it all, I had the long long bug. :D

»
10 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

If I'm not mistaken there was no typical window with text "Contest has started. Would you like to enter the contest area?".

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

    I saw it. And used.

    Like this round. It was sudden and pleasant. Unfortunately, my crooked hands didn't let me make workable my two-pointers-O(n) and really unsophisticated solution in C =__=

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

Извините, а как решать задачу C.

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

    dp[i][j] — количество подстрок, заканчивающихся в позиции i и имеющих уникальность j. Пусть где-то в строке есть еще один символ s[i] (из всех таких рассмотрим крайний правый), тогда все подстроки, начинающиеся после этого символа, будут иметь уникальность больше на единицу. Если подстрока начинается до этого символа, то ее уникальность останется такой же. Так же нужно не забыть учесть новую подстроку (i; i). Для того чтобы пересчитывать быстро стоит заметить, что если мы рассмотрим подстроку (0; i), потом (1; i) и так далее, то уникальность будет неубывать. Поэтому если максимальная уникальность на отрезке 0..i-1 равна x, то подстрочки (0; i), (1; i) ..., (dp[x] — 1, i) имеют уникальность x. Следующий dp[x — 1] подстрочки имеют уникальность x — 1 и т.д. Тогда можно пройтись по их количеству за размер второго параметра и посчитать сколько из них начинаются до правой встречи s[i], сколько после. O(N*26). Если что-то не понятно можно взглянуть на мое решение.