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

Всем привет.

Этим раундом мы торжественно открываем соревнование Яндекс.Алгоритм 2011. Задачи этого раунда были подготовлены мной, конечно, не без помощи команды Codeforces и Яндекс.

Я надеюсь, что задачи вам понравятся, а их решение положит старт удачному выступлению на турнире.

Как вы уже успели заметить — система функционирует в несколько урезанном варианте. Мы решили перестраховаться и выключили на время контеста некоторую функциональность. После окончания раунда все вернется на место.

Напоминаю, что лучшие 500 участников получат путевку в первый отборочный раунд. Однако, если у вас не получится пройти отбор в этот раз, не надо отчаиваться – вы сможете поучаствовать во второй квалификации, которая состоится 6-го мая в 19:00.

Желаю легкости на подъем,
MikeMirzayanov

UPD: Контест закончен! Всем спасибо за внимание, надеюсь вам понравилось. Хочется поздравить победителя watashi и самого удачливого участника cover_dh, который занял 500-е место! Напоминаю, что лучшие 500 участников выходят в первый отборочный раунд.

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

15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Михаил, вы не сделали возможность выбора, будет ли раунд для участника рейтинговым или нет? 
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Round FAQ:
1) Round will be rated (affects rating).
2) Rules are Codeforces standard rules. Please read them carefully!
3) Also be sure you are registered for the contest! Find yourself here.
4) If you passed this qualification - you can participate 2nd qual. and it also affects your rating.

===

FAQ Раунда:
1) Раунд рейтинговый.
2) Правила: стандартные правила Codeforces, прочитайте их внимательно!
3) Проверьте свою регистрацию на соревнование! Найдите себя здесь.
4) Если Вы квалифицировались в этом раунде - Вы можете участвовать и во втором квалификационном раунде, и он тоже будет для Вас рейтинговым.
15 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
больше не флудим в английской
можно было дать выбор, многие бы, я думаю, обрадовались
15 лет назад, скрыть # |
 
Проголосовать: нравится +9 Проголосовать: не нравится
Стоит ли говорить, что рекорд по количеству зарегистрировавшихся побит?
15 лет назад, скрыть # |
 
Проголосовать: нравится +10 Проголосовать: не нравится
        "The registration will be opened during the whole contest."

This was written in the email which was sent to me about this round, but I see that the registration is closed.
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +5 Проголосовать: не нравится

Будем считать этот завал следствием недосыпа =__=
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +3 Проголосовать: не нравится

During the last minute of the contest, I tried to hack with a Python generator submitted as a file named "tt". Had no time to name it nicely.

I've got the following error.
-----
Traceback (most recent call last):

  File "<string>", line 1, in <module>

IOError: [Errno 2] No such file or directory: 'tt.py'
-----
So, the server tried to open "tt.py" when the file was named just "tt".

I believe it's not the intended behaviour. Will it be corrected?

UPD: The test is incorrect anyway, so it won't affect the results.
15 лет назад, скрыть # |
 
Проголосовать: нравится +46 Проголосовать: не нравится
Thanks for the contest!

There's one thing that confuses me: were contestants still separated by division? If yes, it looks unfair because tournament advancement may be easier if you're in div 2.
15 лет назад, скрыть # |
 
Проголосовать: нравится +14 Проголосовать: не нравится
За пятнадцать минут до конца раунда сайт был недоступен с 503-й ошибкой. Починилось быстро, но всё равно тревожный звоночек.
15 лет назад, скрыть # |
 
Проголосовать: нравится -26 Проголосовать: не нравится
Ух ты, блин! Еще б 15 минут-и я бы все 5 сдал! 
5 задача сильно понравилась.
15 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
Спасибо за контест!

Впервые пытался  взломать чужое решение.

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

Во второй раз вижу, что у участника в задаче A решение за квадрат. Пишу генератор на питоне:

N = 10**5//26                                                                                                                               
S = "qwertyuiopasdfghjklzxcvbnm" * N                                                                                                        
print S + S[::-1]                                                                                                                           

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

Что я делаю не так?
15 лет назад, скрыть # |
 
Проголосовать: нравится +15 Проголосовать: не нравится
What is the problem with u guys(codeforces or ....).Why problem statement is so confusing.What does it mean ?

"if two consecutive numbers were separated by spaces only (one or more), then exactly one of them should be left" 

what does it mean =>
---- It means one number will be removed.
---- It means one space will be removed.
---- It means all spaces except one space will be removed. 
During contest i submitted with the second explanation above & i got Pretest passed.
Now if i get WA for this reason is it my problem ??
15 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится
Расскажите, пожалуйста, решение задачи D.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Банально жадно решалась с такими ограничениями.

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

    Итого: O(M * N * M)
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +3 Проголосовать: не нравится
      На самом деле даже альбом на первом месте перебирать не надо, ведь оно ничем не отличается от всех остальных. 
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +3 Проголосовать: не нравится
      Спасибо. Я чувствовал, что это какой то баян и как то тупо решается. Но увы, не допер.
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      С таким решением меня взломали тестом

      6 3

      3 2 1


      Программа пытается поставить 1 2 1 2 3, на последнем шаге единицу поставить не может и выводит -1. На каждом шаге я действительно выбираю альбом с максимальным числом оставшихся. Что тут не так?

      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +5 Проголосовать: не нравится
        Я при равном количестве фотографий в нескольких альбомах отдавал приоритете тому, из которого фотография стоит на первом месте.
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Ну я максимальное всегда выбирал в одном и том же порядке -- первое максимальное от начала, поэтому у меня:

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

      Благодаря таким решениям у меня +500 =)

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

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

    Мое решение - если в альбоме более n/2 снимков, можем считать, что их n/2 - остальные не сможем расставить.  Если теперь в альбомах в сумме менее n снимков - ответ нельзя. Сортируем альбомы в порядке убывания в них снимков. Теперь берем поочередно альбомы и расставляем снимки через одну позицию - сначала все четные позици заполним, потом все нечетные. Никакие два одинаковых не будут стоять рядом и все позиции будут заполнены.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится -15 Проголосовать: не нравится
    Я так бегло просмотрел и заметил, что вроде как никто из отписавшихся не отправил наиболее безыдейное решение на задачу D.
    Очевидно, что если для цепочки и есть хотя бы какие-то запары с расстановкой, то для цепи уже никаких. Так давайте переберем значения первого и последнего элемента (они должны быть различны) и будем очевидной жадностью искать ответ для цепочки со второго элемента до предпоследнего. Там уже понятно, что каждый раз надо ставить наиболее частовстречаемый элемент из допустимых.
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Действительно, бегло:)
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +1 Проголосовать: не нравится
        То есть решение за O(NM3) уже где-то было описано? Я вроде еще раз глазами пробежался по комментариям и не нашел такого. Решения, где перебирается только начальный элемент не предлагать - оно требует хотя бы чуть-чуть подумать.
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится +5 Проголосовать: не нравится
          Если идея "перебрать первый + жадность" верна, то очевидно, что идея "перебрать первый, последний + жадность" отже верна. То есть может решения с двумя переборами описано не было, но из того, что было написано, ясно что оно тоже верное. А "идейность" - понятие субьективное.
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +10 Проголосовать: не нравится
      Почему понятно - ведь на предпоследнем элементе тогда может лажа возникнуть, на него есть дополнительное ограничение - несовпадение с последним.
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +5 Проголосовать: не нравится
        Да, но раз мы перебираем все варианты последнего, то среди них же будет и тот, который стоит в правильном решении, и там лажа не возникнет.
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится
          Почему? Не факт же что правильное решение находится жадно?
          • 15 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится
            Выше было написано два решения: одно с перебором первого, второе  - где на первое место сразу ставится жадно максимум, что идентично первому из-за цикличности. Решение с перебором первого и последнего - идентично решению с перебором первого и второго - идентично решению с перебором первого и подставлением максимума на вторую позицию - идентично решению с перебором только первого, которое было описано выше. 

            (Это все безусловно верно в том случае, если первые два описанных жадных решения действительно верные, а не просто прошли все тесты:) Но если они верны, то тогда решение с перебором двух идентично им.)
            • 15 лет назад, скрыть # ^ |
               
              Проголосовать: нравится +8 Проголосовать: не нравится
              Тут есть два момента.

              1) Мой комментарий был ответом KhaustovPavel на его реплику о том, что есть решение, не требующее доказательства как очевидное. Я объясняю, почему очевидное доказательство не проходит. Мы не опираемся на верность каких-либо других решений, так как это противоречит цели - получению решения, которое очевидно верно.

              2) "идентично первому из-за цикличности" - не понимаю. Вроде выше же было показано, что решение где на первое место ставится жадно максимум неверно без дополнительных хаков )
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Ну в моей реализации я всегда смотрел оба элемента - предыдущий и последующий (для рассматриваемого интервала они всегда существуют). Изначально все незаполненные элементы просто ставил равными -1.
        Если мы пришли в состояние, когда мы не можем поставить на предпоследнюю позицию ни одного элемента, это означает, что где-то в случае, когда у нас было два альбома в которых осталось равное число неиспользованных изображений мы выбрали не тот. Рано или поздно мы придем к варианту, когда на последнем месте стоит тот самый элемент, который тогда мы выбрали при равенстве. Так как порядок приоритетов у нас всегда фиксированный, то и в этот раз мы опять выберем его же там в середине и к предпоследнему элементу у нас будет все тот же элемент, что и в прошлом случае, но на этот раз он не будет совпадать с последним.
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится +5 Проголосовать: не нравится
          Нет, мы не выберем его же в середине, так как поставив его на последнее место, мы уменьшим его счетчик на 1, и поэтому все наши решения, возможно, будут другими.

          Кроме того, непонятно почему "в случае, когда у нас было два альбома в которых осталось равное число неиспользованных изображений мы выбрали не тот" - а вдруг нужно было брать очередное изображение не из максимального альбома?
          • 15 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится
            Ну... Каждый раз нам необходимо максимизировать число вариантов, которые у нас все еще остаются. То есть наша цель - минимизировать количество альбомов, в которых уже не осталось изображений. Отсюда я сделал вывод о целесообразности выбора альбома с наибольшим числом изображений.
            А по поводу "в середине" - я не ясно выразился. Я имею в виду то, что при равенстве мы будем выбирать теперь уже тот, что стоит в конце (если это возможно).
            • 15 лет назад, скрыть # ^ |
               
              Проголосовать: нравится 0 Проголосовать: не нравится
              Непонятно, почему нам нужно максимизировать число вариантов, которые еще остаются. Нам нужно, чтобы не осталось ноль вариантов, а сколько их будет на промежуточном шаге - неочевидно. Так можно было бы любой жадный алгоритм доказывать :)

              Про "в середине" все еще не понимаю. Можно конкретный пример?
              • 15 лет назад, скрыть # ^ |
                 
                Проголосовать: нравится 0 Проголосовать: не нравится
                Для теста:
                N = 7, M = 4
                A1 = 1, A2 = 2, A3 = 3, A4 = 1:

                Предположим, что мы всегда будем выбирать элемент, которого у нас в запасе больше всего. При равенстве количества будем брать наименьший по значению.
                Мы предположили, что первый элемент последовательности равен 4, а последний равен 3, тогда:
                4 2 3 1 2 ? 3
                На позицию предпоследнего элемента нам нечего поставить, что нас не устраивает. Предположим, что последний элемент равен 2 (первый все так же 4):
                4 3 1 3 2 3 2
                Как видим, где-то там в начале тройка уравнялась с двойкой, но так как в порядке приоритетов двойка идет раньше тройки, то она не осталась на предпоследнюю позицию.

                По поводу выбора элемента, который у нас имеется в самом большом количестве... На самом деле нам желательно сделать так, чтобы в конце (на предпоследней позиции) осталось 3 варианта, тогда мы в любом случае сможем поставить предпоследний элемент. Если осталось 2 или 1, то нужен порядок приоритетов, который позволит удержать к этому моменту допустимый элемент. Это уже по части предыдущего утверждения. Помимо прочего, нам не важно, сколько у нас имеется в запасе каждого элемента. Нам важно только количество различных элементов. Не может же возникнуть ситуации вида "нам нужен именно ЭТОТ элемент", может быть лишь ситуация "нам нужен любой элемент кроме ЭТОГО". Так давайте будем до последнего поддерживать количество различных элементов как можно большим.
                На звание строгого доказательства это не претендует :)
                • 15 лет назад, скрыть # ^ |
                   
                  Проголосовать: нравится +6 Проголосовать: не нравится
                  Ага, примерно понятно, спасибо :)
                • 15 лет назад, скрыть # ^ |
                   
                  Проголосовать: нравится +5 Проголосовать: не нравится
                  Почему-то на обоснование "наиболее безыдейного решения" потребовалось больше всего текста :)
                  • 15 лет назад, скрыть # ^ |
                     
                    Проголосовать: нравится +2 Проголосовать: не нравится
                    На контесте я для себя это обосновал так:
                    "Если не это, то что?!".
                    • 15 лет назад, скрыть # ^ |
                       
                      Проголосовать: нравится 0 Проголосовать: не нравится
                      Кстати, я примерно так же обосновывал решение для себя :)

                      Вообще тупая жадность не прошла претесты, в итоге я решил написать как можно более навороченную жадность, думая что если уже она не пройдет, то не знаю что дальше буду делать. Получилось извращенное решение со сложностью O(N2M2logM), которое мало того что прошло, так еще и за 30мс отработало.
                      • 15 лет назад, скрыть # ^ |
                         
                        Проголосовать: нравится +1 Проголосовать: не нравится
                        =======================
                        Мое тоже отработало за 30мс, но там это происходило из-за того, что если ответа нет, то все варианты быстро отбрасывались еще на стадии расстановки, а первый же найденный ответ сразу же выводился в файл и на этом работа программы окончена. Как правило, если ответ есть, то он находится достаточно быстро.
    • 15 лет назад, скрыть # ^ |
      Rev. 2  
      Проголосовать: нравится 0 Проголосовать: не нравится

      я посортировал все албомы по убыванию фотографий в них, на первое место ставим фотку из первого альбома (в нем максимальное число фоток). очевидно что если решение есть, то есть и такое. затем рекурсивно перебираем какие фотки будут поставлены на места 2, 3, 4 (они могут быть из одного и того же альбома, если не соседствуют, и эти фотки перебираются только из четверки самых толстых альбомов) затем заполняем массив начиная с позиции n до позиции 5, каждый раз беря фотографию из альбома, в котором на данный момент больше всего фотографий. Доказательства у меня конечно нет, но интуитивно мне верилось что такое проканает.Поясняю почему мне в это верилось. Давайте поставим на первую позицию фотку из самого толстого альбома, а затем будем жадно расставлять до самого конца. У нас может построится решение, а может обломаться тем, что в конце две фотки окажутся из одного альбома. В случае если алгоритм олбомался, а решение существует, можно переставить несколько фоток местами и получить решение. Последнее утверждение требует доказательства, но мне показалось оно разумным и решение прошло тесты. итого 4^3 * n * m. Интересно уже увидеть авторское решение, задача мне не понравилась если честно, чувство такое что я какой-то чит вогнал.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится -10 Проголосовать: не нравится
    У меня зашел перебор с грамотными отсечениями - пихаем символы по кругу, если на каком-то этапе осталось запихать L символов, и в какой-то кучке больше L/2 + L%2 фоток - то уходим. Естественно, до этого нужно кол-во фото во всех альбомах сделать равным N, убрав лишние из самых больших альбомов.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +5 Проголосовать: не нравится
    В моей комнате было отличное решение maggot092, оно прошло систесты. Решение такое. Сначала оставим от каждого a[i] не более n/2 и проверим, что это вообще возможно. Затем будем ставить a[1] первых, a[2] вторых, и так далее, пока не поставим n штук, на позиции в следующем порядке: сначала 1, 3, 5, ..., а потом 2, 4, 6, ... (нумерация с единицы).
15 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится
Oops

(a < b && t[i] > cutOff) || (a > n && t[i] < cutOff)

and I've tested in on many cases :)
15 лет назад, скрыть # |
 
Проголосовать: нравится +10 Проголосовать: не нравится
Куда пропало соревнование
15 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
Рейтинг будет считаться по общей таблице или будут созданы таблицы дивизионов?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится -43 Проголосовать: не нравится
    Лучше б таблицы дивизионов не создавали. Возможно проскочу в оранжевые тогда:)
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится -41 Проголосовать: не нравится
      Проскочил:)
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится -36 Проголосовать: не нравится
        Кому-то не понравилось что я оранжевый? Почему так активно минусуют?
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится +12 Проголосовать: не нравится
          Меньше на вклад смотри. Что ты все время из-за него загоняешься? Когда у тебя появилась одна оранжевая точка - это еще не оранжевый. Да и вообще на CodeForces уже даже красный цвет ничего не значит. Тут рейтинг скачет как давление в 80 лет. За один раунд вот так можно подлететь на 200+ рейтинга если ты еле влез в топ100. И красный может за один раунд вылететь в фиолетовые.
          • 15 лет назад, скрыть # ^ |
             
            Проголосовать: нравится +9 Проголосовать: не нравится
            Я за время своей CodeForces-жизни побывал почти во всех доступных цветах :) За исключением единственно серого, но я не сильно переживаю на этот счет =)
            • 15 лет назад, скрыть # ^ |
              Rev. 3  
              Проголосовать: нравится 0 Проголосовать: не нравится

              А есть ли те, кто побывал во всех цветах?
              Вспомнился текст из песни
              "Эй, жители неба,
              Кто на дне ещё не был?
              Не пройдя преисподней,
              Вам не выстроить рай.
              Эй, жители дна,
              Гром смеётся над вами.
              Чтобы быть с ним на равных,
              Есть один путь - наверх!
              "
          • 15 лет назад, скрыть # ^ |
             
            Проголосовать: нравится -25 Проголосовать: не нравится
            Паш, мне на него вообще пофиг. И, заметь, я написал "проскочил".
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
HI, can anybody tell me how to solve C?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    we have to Max
    ( a1 + a2 + ... + aa ) / a + ( b1 + b2 + ... + bb ) / b

    to common divisor
    ( b * ( a1 + a2 + ... + aa ) + a * ( b1 + b2 + ... + bb ) ) / a*b <= cnst

    b * ( a1 + a2 + ... + aa ) + a * ( b1 + b2 + ... + bb ) --> max

    then guess that if b > a, then ai sould be >= bi
    else if a < b

    if a == b we must output 1 1 ... 1 1 2 2 ... 2 2
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +8 Проголосовать: не нравится

    S1 / A + S2 / B ->max

    S1 + S2 = total sum of all a[i]

    if A = B then output 1 1 1 ... 2 2 2

    if A > B we need to maximize S2, else S1

    if A > B

    we need to sort array of marks, S1 = a[1] + a[2] + ...+ a[A], S2 = a[A + 1] + ... a[A + 2] + ... +a[n]

    we can count how many marks 1 we must to include in S1, how many marks 2  we must to include in S1.. 


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

МЕНЯ ВЗЛОМАЛИ НА НЕКОРРЕКТНОМ ТЕСТЕ :(

ЧТО ДЕЛАТЬ ???.....

  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +11 Проголосовать: не нравится
    Что за тест? Может ты не понимаешь почему он корректен?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +9 Проголосовать: не нравится
    1) Не писать жирным и подчёркнутым текстом.
    2) Откуда информация, что тест некорректный?

    Какая задача, какой тест?
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится -8 Проголосовать: не нравится
      В условии гарантировалось, что в ответе будет хотя бы один символ, а в взломе вывод пуст..... :(
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +25 Проголосовать: не нравится
        Это потому что там TLE.
        Видимо если решение не проходит по времени, то и чекер не запускается. Поэтому в строчке answer пусто.
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится -8 Проголосовать: не нравится
          Запускается там чекер. Не сразу понял в чем дело, пришлось символ спереди добавить, чтоб взламать решение. :)
          • 15 лет назад, скрыть # ^ |
             
            Проголосовать: нравится +5 Проголосовать: не нравится
            Видимо сначала тест проверяется на корректность, потом тестируется решение участника, потом тест запускается на авторском решении.

            Если решение участника падает (по времени например), то авторское решение не запускается и строчка остаётся пустой.
      • 15 лет назад, скрыть # ^ |
        Rev. 3  
        Проголосовать: нравится 0 Проголосовать: не нравится

        Мне больше интересно другое...

        Я сломал решение 424785 тестом [ab]49999раз + [ba]49999раз + с.
        Затем прошло точно такое же решине на паскале:

            1. var
            2.  s : ansistring;
            3.  i, n : longint;
            4. begin
            5.     readln(s);
            6.     n := length(s);
            7.     for i := n - 1 downto 1 do if (s[i] = s[i + 1]) then delete(s, i, 2);
            8.     writeln(s);
            9. end.

        И это же решение снова ломается подобным тестом! Правда не видно каким точно... Но суть вроде та же.

        Может бага в системе?
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится +1 Проголосовать: не нравится
          Это моё решение !!! И оно проходит в дорешивании....
          • 15 лет назад, скрыть # ^ |
            Rev. 3  
            Проголосовать: нравится +8 Проголосовать: не нравится

            Значит системные тесты оказались слабые и взломы всё ещё не включаются в них.

            Мне больше интересно как это решение прошло (обошло) мой первый взлом.
            Не должно же было. Тут же квадрат.
            • 15 лет назад, скрыть # ^ |
               
              Проголосовать: нравится 0 Проголосовать: не нравится
              на вашем тесте решение отрабатывает спокойно линейку, так как в вашем тесте вообще нет двух рядом стоящих одинаковых символов и delete никогда не вызывается. а вот на тесте [ab]49999 + [ba]49999 + c оно будет работать действительно за квадрат, и меня тоже смущает факт что это решение работает не дольше 770мс на систестах.
              • 15 лет назад, скрыть # ^ |
                 
                Проголосовать: нравится +8 Проголосовать: не нравится
                Да! Да! Да!
                Там конечно было вот точно как у вас!
                • 15 лет назад, скрыть # ^ |
                  Rev. 2  
                  Проголосовать: нравится 0 Проголосовать: не нравится

                  1. В систестах я вашего теста не наблюдаю, хотя взломотесты всегда добавляются. Во всяком случае в задаче B 41ый тест мой. Возможно, жюри решили не перегружать задачу А кучей огромных тестов участников.
                  2. В вашем тесте не хватает девятки. На 4999 оно действительно имеет право работать квадрат.
                  3. По-моему,  напрашивается вывод, что жюри зачем то пропускает очевидно неверное решение по задаче A. Либо мы чего то не знаем о процедуре delete.
                  UPD: на тимусе оно как не странно получает TLE (задача 1654)
        • 15 лет назад, скрыть # ^ |
          Rev. 2  
          Проголосовать: нравится 0 Проголосовать: не нравится

          А я видел подобное решение и ломал ровно этим же тестом. И... программа работает за 50мс. Как так?
          Upd. нет, там все нормально, извините.
15 лет назад, скрыть # |
 
Проголосовать: нравится +13 Проголосовать: не нравится
Возможно этот вопрос уже поднимался, однако: куда делись графики рейтинга на станицах? Сделано ли это специально, чтобы не давать участникам лишней информации? Когда вернут? :)
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +3 Проголосовать: не нравится
    Наверное, это одна из фич, которые отключили на время контеста, чтобы сервер не перегружать.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +12 Проголосовать: не нравится
    Это сделано для того, что бы облегчить нагрузку на cf во время контеста. Я так думаю
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +4 Проголосовать: не нравится

    "Как вы уже успели заметить — система функционирует в несколько урезанном варианте. Мы решили перестраховаться и выключили на время контеста некоторую функциональность. После окончания раунда все вернется на место."


    По моему это как-то намекает - )


  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Вроде бы это сделано для снижения нагрузки на сервер во время контеста с большим числом участников. Сейчас много фич отключено.
15 лет назад, скрыть # |
 
Проголосовать: нравится -22 Проголосовать: не нравится
По ходу соревнований сдал четыре задачи без бревен и шел неплохо. Но в конце меня взломали по второй задаче. Я думал, что это фейл дня. Но во время систеста у меня упала первая задача из-за того, что я конкатенировал stl-строки. Всего-то надо было переписать на массив чаров... Зато перепосланная на 498 баллов вторая задача зашла. Как результат, можно считать, что я сдал первую задачу, но не сдал вторую (первая моя посылка по второй все равно бы не прошла систест из-за еще более глупой ошибки). Справедливость восстановлена...
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Спасибо, не заметил.
Вот только не понимаю людей, минусующих посты с такими вопросами. Ну да это их проблемы...

upd: комментарий к этому
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
What about rating? :)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
I am not able to reply to petr's post. is it a bug?
15 лет назад, скрыть # |
 
Проголосовать: нравится -12 Проголосовать: не нравится
The server was too slow, I can't submit any problem for 50 minutes. Anyway, good problemset.
15 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится +4 Проголосовать: не нравится

В задаче B во время контеста получил "Неправильный ответ на претест 5" (посылка 428332), но на своём компьютере программа выводила правильный ответ. Заменил "while (cin.get(ch)) s.push_back(ch);" на "while (cin.get(ch))  if (ch!='\n') s.push_back(ch);", то есть если следующий символ во входном файле не равен новой строке - считываем его, в результате "Полное решение". Отсюда делаю вывод что в претесте 5 в строке есть символ новой строки, а это противоречет условию задачи.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
My solution of problem B (#427173) had WA on test 8.
But, it returned correct answer on custom test with input of test 8.
Why did such a thing happen?
15 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится
Баг: точка в графике рейтинга подписана как

Открытый турнир Яндекса 2011<BR>Квалификация 1
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
а в задаче B по условию может быть перевод строки в тесте?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    по условию
    >>Входные данные
    >>Входные данные содержат единственную строку s.
    как мне кажется не должен содержать, но
    #include <cstdio>
    #include <cstdlib>
    int main(){
        char c=getchar();
        while(c!=EOF){
            if (c=='\n') return 1;
            c=getchar();
        }
        puts("1, 2, 3, ..., 10");
        return 0;
    }
    получает runtime 1 o_O
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Конечно, каждая строка текстового файла заканчивается символом перевода строки. Тест 5 не был особенным. Все тесты имеют вид "некоторая-строка\r\n".
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +3 Проголосовать: не нравится
      Строка может заканчиваться переводом строки. Т.е. файл может заканчиваться /n+EOF, в принципе и должен. Где-то говорили, что это признак хорошего стиля тестов.
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +8 Проголосовать: не нравится
        Более того, если даже задача - парсер и во входе допустимы пустые строки, которые надо как-то нетривиально обрабатывать, то, скажем, файл с текстом <something>+/n+EOF надо обрабатывать как содержащий одну строку - <something>. Этот факт был со скорбью и негодованием мною уяснён экспериментально в одном из первых раундов Codeforces.
15 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

http://acm.timus.ru/problem.aspx?space=1&num=1654&locale=ru

Никому ничего не напоминает?)

15 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
Can anyone help me to figure out why his code for A
Runtime error on test 12

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

Hope to see no more morning-contests :)
It's really hard to wake up before 11:00
15 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
epic fail

Научите меня читать
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +3 Проголосовать: не нравится
    только я такой особенный или у кого-то тоже возникли непонятки с формулировками в Б?
    • после каждой запятой шел ровно один пробел (если запятая является последним символом строки, то это правило к ней не применимо),
    • перед каждым многоточием был ровно один пробел (если многоточие начинает строку, то это правило к нему не применимо),
    • других пробелов быть не должно.
    при тесте "... ," ответ должен быть "...,", а я возвращал "... ,"
    немного не ясно почему, ибо про разделение чисел пробелами сказан, а про разделение знаков - нет. понимаю, что сам виноват, но все же неприятно из-за этого схватывать WA
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится


15 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
Мне кажется или произошла очередная инфляция рейтинга?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    мне тоже так показалось, особенно у 2-ого дивизиона. наверное это потому, что многие фиолетовые и оранжевые ниже многих зеленых и синих.
15 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

can anyone tell me how to solve the problem E.

although it has tag of tree and dp, but i think it is not a tree, how can we to solve it with tree dp.

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

    1). Lets choose some person and walk to its' friend, to a friend of a friend and so on. Obviously, at some point we will receive a cycle. So, generally, our graph ( nodes=people, edges=friendship) is divided into cycles with som "tails" whom which you can go into the cycle by edges. 

    2). Let's traverse every edge. Cycle remains cycle and from some nodes on a cycle we now can go to some other nodes, possibly from one node to few different nodes. So actually our figure is a cycle with oriented trees that "hang" on the nodes of cycle.

    3).For each tree compute the following DP: 

    F(i,0) = maximum number of pairs we can choose from subtree of i we we don't use i in any pair.
    F(i,1) = the same if we match i with some of its descendants.

    Obviously, F(i,0)=sum(max(F(Child i,0), F(Child i,1))) for each child of i.
    Obivously, F(i,1)=max(F(i,0)-max(F(Child i,0), F(Child i,1))+F(Child i,0)+1) for each child of i. (We loop through all children of i and try to pair i with that child).

    4). Now we have two options: to match last node of a cycle with first one, and not to match. In both cases we then delete our edge from last to first node and we get a chain. We perform almost the same DP on this chain:

    G(i,0) = F(i,0)+max(G(i-1,0),G(i-1,1)) - we don't match i-th node with anything.
    G(i,1) = max(F(i,1)+max(G(i-1,0),G(i-1,1)), F(i,0)+1+G(i-1,0))
    For G(i,1) we have to options: we either match our node with some node in its subtree (first value in max) or match it with previous node in cycle and add F(i,0).

    In case if we match 1-st and last node, G(0,0)=-infinity, G(0,1)=1+F(0,0) and the answer is in G(n-1,0), because n-1-th vertex can not be matched with previous node as it is already matched with the first one.
    In case if we don't, G(0,0)=F(0,0), G(0,1)=F(0,1) and answer is max(G(n-1,0), G(n-1,1)).

    Also, to make it easier, I wrote about DP that just returns maximum number of pairs but I hope it is obvious how to turn in to DP that returns maximum number of pairs|maximum number of boy-girl pairs.

    Hope this helps!

    PS. Solution below is better because it is easier and uses only one DP instead of two.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +10 Проголосовать: не нравится

    Each connected component in the graph has exactly one cycle. Pick any edge from the cycle and remove it from the graph, now we should consider two cases: a picked edge is in the answer and it isn’t there.  Both cases can be easily solved with dp on tree.

15 лет назад, скрыть # |
 
Проголосовать: нравится -8 Проголосовать: не нравится
Раскажите пожалуйста как решать задачу Е.
По существу, я так понимаю, что она идейно очень похожа на вот ету http://mirror.codeforces.com/contest/70/problem/E. Очень бил би благодарен за хорошое обєснение, возможно нє только етой задачи(Е. По парам.), но и самого принципа. Да и еще парочку задач разной сложности чтобы ето закрепить. :)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Перенесу обсуждение сюда.

  1. var
  2.  s : ansistring;
  3.  i, n : longint;
  4. begin
  5.     readln(s);
  6.     n := length(s);
  7.     for i := n - 1 downto 1 do if (s[i] = s[i + 1]) then delete(s, i, 2);
  8.     writeln(s);
  9. end.
Это код посылок 427555 и 427592 с соревнования (от Ministr).
Код абсолютно одинаков. Разница в том, что первая посылка получает
Превышен предел времени на взломе 1 [взломы], а вторая Полное решение [претесты].

Подумал-подумал и решил проверить это решение на систестах в дорешивании. Результат:
Delphi: Превышен предел времени на тесте 12, 1000 мс
FreePascal: Полное решение, 770 мс

 Теперь мне хочется прогнать этот код во фри на сервере с тестом [ab]x49999 + [ba]x49999 + c. К сожалению сейчас это сделать невозможно (ограничение на ввод - 20kb).
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
При участии вне конкурса во второй квалификации, влияет ли она на рейтинг?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +3 Проголосовать: не нравится
    MikeMirzayanov
    Да, все раунды будут рейтинговыми. Более того, во всех них сможет принять участие любой желающий. Если участник не квалифицирован на этот раунд, он будет участвовать вне конкурса, но рейтинг участника будет пересчитан в соответствии с совмещенной таблицей результатов участников в конкурсе и нет. Вероятно, исключением станет финальный раунд, поживем-увидим.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Да, так уже было на Manthan.
15 лет назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится
Hi!
I don't know why I can't register Qualification 2.

It said that I had already qualified into the competition, and let me choose whether I want to register as OUT OF COMPETITION participant. I choosed "Yes", but it didn't work, I still can't register this competition.

Anyone can explain this and help me? Thanks a lot!
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Кстати, видимо впервые более 1000 человек участвовали в контесте.
15 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится
Что то мне подсказывает, что количество участников второй квалификации перевалит за 2000=)
15 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится
Дайте все-таки уточнить.
При регистрации на вторую квалификацию мне сказали, что я регаюсь вне конкурса, потому что уже квалифицировался в первый раунд.
Значит ли это, что раунд не повлияет на мой рейтинг или все-таки повлияет?
15 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится
А когда будет официальный разбор задач от автора тура?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
я бы хотел спросить насчет второго квалификационного раунда Yandex.

кто там участвует вне конкурса для них раунд будет не рейтинговым?  или же рейтинговым?
15 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится
Жесть. Уже за две штуки учасников перевалило.
Дай Бог что б сервак выдержал :)
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Really curious about will there be editorials for Yandex Open?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
А будет ли вообще разбор?
»
8 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Hi, can someone give me some hints for problem D? I have got to ask since there is no editorial available. Thanks in advance.