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

Автор maksay, 13 лет назад, По-русски
Только у меня веб-интерфейс не грузится?
(Обсуждение задач - после конца контеста)

UPD: 
Извините, но это просто нет слов!
В 3:30 у нас было 5 сданных задач и подходила 6я. Внезано сначала ретестят Н, затем включают полный ретест и просят не сабмитить до сообщения от жюри. Ретест длится почти полтора часа, и никакого сообщения нету. Наконец в 4:40 жюри отвечает на чей-то вопрос, что оказывается, сабмитить уже можно. Впрочем, некоторые участники сабмитили во время реджаджа, но это их дело.

В теперь о совсем фееричном: задача Е, которая проходила до реджаджа, после дает ТЛ 3.. Задача Н, которая проходила до реджаджа, да ВА/ТЛ 19. При этом ограничения подкручены так, что на ней у нас не проходил достаточно оптимальный квадрат, та же ситуация в Д. В общем, не понравилось!

Хотел уточнить, как решали Е и Д и Н те, у кого она прошла? С какой асимптотикой? У нас был N^2logN и N^2 и N^2 соответственно.

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

13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Подскажите, пожалуйста, в чём суть решения задачи J(Вилсон). 
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    (p - 1)! = p - 1 - если p простое.
    0 - если не простое, только для 4 ответ 2.
    • 13 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится
      Самое обидное то, что я делал также :(
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        ну там вывод не самый приятный.
        st - если (n % 10 == 1 и n / 10 % 10 != 1)
        nd - если (n % 10 == 2 и n / 10 % 10 != 1)
        rd - если (n % 10 == 3 и n / 10 % 10 != 1)


    • 13 лет назад, # ^ |
        Проголосовать: нравится +2 Проголосовать: не нравится
      Есть исключения для 1 - ответ 0, а для 4 - 2
      • 13 лет назад, # ^ |
          Проголосовать: нравится +8 Проголосовать: не нравится
        Для 1 ответ 0 не будет исключением, независимо от того, считать ли 1 простой :)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Для всех простых n ответом будет n-1. Для остальных чисел ответ 0. "4"-ка - исключение. Понял это генерацией.
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Костя, подожди! Ещё у первого дивизиона контест не закончился.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Как L (про насекомых) решалась?
А то 5 без неё сделали, единственные такие, видимо как-то просто :/
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Когда насекомые сталкиваются, то можно считать, что ничего не происходит
    Т.е. ответом будет минимум по величинам:
    i = 0..n
    a[i], если оно идет влево
    L - a[i], если оно идет вправо
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
    -never mind-
13 лет назад, # |
  Проголосовать: нравится +28 Проголосовать: не нравится
Хотелось бы спросить авторов. Зачем делать вывод таким, чтобы он занимал не одну, а 10 строк кода.
Более того, до этих 10 строк невозможно додуматься не зная хорошо английский язык?
Задачу решить легче, чем вывести ответ. Это какое-то неуважение к участникам.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +4 Проголосовать: не нравится
    Присоединюсь. Особенно порадовала строчка "There are 1 ways" в одной из задач. Если уж вы решили делать такой вывод, то сделайте его нормально.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    Если вы про задачу J, то действительно с выводом большие проблемы, особенно если в школе изучаешь немецкий язык :)
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    "...не зная хорошо английский язык..."
    во во, это про меня...
  • 13 лет назад, # ^ |
      Проголосовать: нравится +44 Проголосовать: не нравится
    Прошу прошения за прямоту, но вот мне бы очень хотелось выругаться матом на авторов ТАКОЙ задачи. И если бы я сел писать комментарий часочек назад так и произошло. Но теперь когда я остыл от этих эмоций просто скажу: ФИИИИ!!! Большое и неприятное ФИИИ!!!!

    P.S. Есть еще много чего мне хочется сказать и организаторам, которые реджаджили аксептоды, из-за чего приходилось заново и заново возвращаться к задачам, и авторам за "понятное" замечательное условие в задачах F и J. Но увы прийдется промолчать, потому что цензурными словами высказать этого недовольства не получится.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Наверное, авторы хотели сделать что-то похожее на формат задач финала. Но такой геморрой с выводом числительных - слишком уж неприятно. Хотя бы в условии формально описали, как выводить...
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
      Участникам самого ЧУ эпичности провалу добавило то, что условия были только на русском языке с таким выводом. Были бы всё на английском - было бы хоть чуть-чуть человечней. Ну и просто добавить в пример 11, 12, 13 - непонятно в чём проблема.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Более того, на вполне логичный вопрос от школьных команд "когда какие окончания выводить" следовали ответы без комментариев.

        В целом чемпионат не понравился (несмотря на то, что мы заняли весьма неплохое для нас 5-е место среди участников самого ЧУ) - слишком много геморроя с такими мелочами, как длинные неосмысленные выходные данные, не обговоренные четко в условии критически важные моменты (например, в F вы за сколько догадались, что пара может состоять из двух одинаковых людей?). Из сданных нашей командой 6 задач мне больше всего понравилась E - довольно сложная, интересная задача. Мы решили ее при помощи DP, Z-функции и подсчета разностей значений функции ответа.
        • 13 лет назад, # ^ |
            Проголосовать: нравится +8 Проголосовать: не нравится
          Вообще вполне логичный ответ. Условие прозрачно намекает, что выводить надо согласно правилам английского языка. Вы же не думаете, что ответ жюри может состоять из них?

          например, в F вы за сколько догадались, что пара может состоять из двух одинаковых людей?
          Мы на это потратили не очень много времени, переключившись на другие задачи.
        • 13 лет назад, # ^ |
            Проголосовать: нравится +5 Проголосовать: не нравится
          Про E, спасибо :-)) Моя задачка...
          Специальная задачка для любителей сложных строковых алгоритмов)
          Решение, которые написал бы я, - чистое DP.

          Видимо, я уже накушался самых дурацких условий... Ни J, ни F при прочтении не вызвали вопросов. Когда я читал условия, в J мне было очевидно из sample-а и "знания" английского, а в F - из фразы "Строка с номером i состоит из i бит". Это намекает, что i-й бит важен.
          • 13 лет назад, # ^ |
              Проголосовать: нравится +8 Проголосовать: не нравится
            То, что человек может быть другом сам с собой -- это как раз пофигу. Но вот то, что если у i-го человека друзей нет, то (i, i) -- пара человек, у которых нет общих друзей, может быть и звучит логично, но должно быть описано в условии (или как минимум в кларе, на который нам ответили No comments).
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Вот и жюри объявилось)) Серег пожалейте участников в следующий раз)
            • 13 лет назад, # ^ |
                Проголосовать: нравится +1 Проголосовать: не нравится
              Жюри появилось уже давно... Видел длинный пост от Гассы?
              А это я из Казахстана нашел полчасика посмотреть, какие еще баги кто нашел)

              P.S. Я участников в этот раз честно пожалел, как мог))) в D O(N^2), в E O(N^2)... в B можно было сжать граф до 20 000 вершин... А представляешь в D был бы Nlog^2, в E Nlog^2, а в B 5x5x5 ? :-) а сложную геометрию K просто выкинули на фиг еще до тура.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Имхо, то, что i-ый бит важен, как раз не указывает на то, что участники пары должны быть различны - петли в графе важны,  даже когда пары состоят из различных людей: например, граф на двух вершинах и с ребрами 1-2 и 1-1, тогда петля в первой вершине запрещает пару (1,2). Единственным формальным указанием на то, что пара может состоять из одинаковых людей, которое мне удалось найти, это отсутствие слова "различные".
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Интересны идеи решения на D и F, ибо вроде написал на ac, а мне всё wa и wa(...
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    А почему не раскодировать и потом за n^2 * (n / 32) по маскам =)
    Или я условие не так понял? Сложность O(3 * 10^7).
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    А в D суффиксной структурой данных надо было посчитать сколько раз каждая из подстрок встречается. Потом перебрать все подстроки в лексикографическом порядке и отвечать на запросы.
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
      Решение одного из топов - сортируем за квадрат, а потом разбиваем на блоки с одинаковым префиксом, и выкидываем постепенно...
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        А как сортировать за квадрат?
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Сортировкой подсчетом за О(N*(Length+26))
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            А как это? Подстрок порядка N * N, длина порядка N, получается N^3.
            • 13 лет назад, # ^ |
              Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится
              Нет. Сначала сортируются все суффиксы. А затем делается следующее:
              Для начала записывается, что для каждого из суффиксов мы берем все префиксы по одному разу.
              (Пусть это количество для j-отого префикса i-того в отсортированном порядке суффикса - Fij)
              Затем проходим все суффиксы с конца, если префикс длины j текущего и предыдущего суффикса совпадает, то
              1). Fi-1j +=Fij
              2). Fij=0

              Таким образом когда мы будет проходить суффиксы сначала, то получить искомую строку всех отсортированных подстрок можно последовательно для каждого і  для каждого j прибавляя к ответу Fij раз j-тый префикс i-того суффикса.

              Однако явно этого делать не надо, надо во время этого прохода вторым указателем проходить по отсортированному массиву запросов и отвечать на каждый запрос, попадающий в текущую группу одинаковых префиксов.
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                да, понятно, спасибо
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                Я Д решал ДП на суффиксном автомате - там просто идем дфс по нему и обрабатываем отсортированные запросы.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        А я думал, что проще построить НЕсжатый бор (суф.дерево) за квадрат...
        Для хранения строк вроде бы бор максимально удобен. А когда он не сжатый и за квадрат, так еще и писать приятно))
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          А как несжатый бор уместить в память без хаков?
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Мы запихали, но это было непросто...
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Мы тоже запихали, поэтому я и спросил, как это сделать "без хаков". С хаками писать гораздо неприятнее :)
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                А мы за линию решали и не было проблем=)))
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                А мы не запихали :(
                Какие у вас были хаки?
                • 13 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится
                  Вершины бора делятся на 2 категории - те, у кого <=1 ребёнка, и все остальные. Вторых мало. Но по сложности кодирования это уже напоминает сжатый бор...
                  • 13 лет назад, # ^ |
                      Проголосовать: нравится 0 Проголосовать: не нравится
                    А если кодировать вершины по принципу first-child, next-sibling, то это по времени не укладывается? С таким подходом можно вообще до 5 байт на состояние сделать, и код сложным не будет.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Я бы хранил так же, как и ты: разбивал вершины на 2 типа...
            Просто я часто так пишу, поэтому код короткий.
            По крайней мере, короче сжатого :-)

            P.S. Вообще без хаков не умею...
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    да, решение понятно, я писал N^3/64, не суть, успевает, но в задаче пара может быть 1 1, т.е. есть у человека нет друзей, то у него же с самим собой нет общих друзей и это может быть ответом, полубред, но все же...
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Еще хотелось бы решения F и H
(H засылали за n^2*logn - ТЛ9, а F почему-то ловила ВА2)
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится
    H можно сделать за O(n2). При генерации чисел, они уже идут в порядке возрастания.
    Первоначально первый список это и будет пересечения. Дальше пересекаем его со 2 списком. Т.е. сливаем списки это за O(N) делается. И выбираем такие элементы, которые встречаются дважды это тоже за O(N) легко делается. Получаем список пересечения первых 2 списков и его будем пересекать с 3 списком и т.д. В конце получим список перечения всех списков.
    Сложность O(N2) получилась и это у меня довало TL, пока не убрал деление по модулю при генерации заменив его на операцию &(232 - 1)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      можно не делать по модулю, а просто использовать всё unsigned int (безнаковый 32-битный), мммм, почти всё (это мой +1) - только на yi надо было long long
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        И это ловило ВА 19 непонятно почему)) а в long long АС
        • 13 лет назад, # ^ |
            Проголосовать: нравится +5 Проголосовать: не нравится
          почему непонятно, понятно - xi могут быть под 2^32, m=0 итого yi = n * 2^32
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            не знаю может здесь не написал - все в unsigned int, кроме естесственно у. я немного все таки соображаю)
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Можно еще круче. В жаве нет беззнаковых типов, поэтому для xi мы обошлись кастом к обычному int без использования модуля. Но yi в long конечно.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Какой прикол в F?
может ли человек дружить сам с собой?)
как все же биты нумеровались и куда приписывались нули?)
Я считывал строку s.
для просмотра j бита(нумерация с 0) брал s[j / 6] символ и там брал (5 - j%6) бит) или все же я что-то не так понял?)
  • 13 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Человек сам с собой может не иметь общих друзей.
    И он может дружить с самим собой.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      А как тогда получили ответ в условии? там в в обоих случаях, первый не имеет друзей, т.е ответ должен быть 1 1.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Читайте подробнее формат - дан только нижний треугольник матрицы смежности. Так что первый там имеет друзей.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Может. И при этом ответом может быть пара типа "А А". Совершенно алогичная задача.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      такого подвоха я не ожидал.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Не говори! Это просто жесть) Когда мне предложили такой вариант на контесте, я говорю - это ж  бред, потом от безысходности поправил и прошло)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      да, не совсем хорош, я все перечитывал и перечитывал условие, так и знал, что слово "движок" в кавычках да что-то значит)))
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Как решать E и A?
  • 13 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится +5 Проголосовать: не нравится
    Задача А
    Просто промоделируем и смотрим на каком месте вылетит Катя. Пусть это место j. При этом Васю просто не учитываем, смотрим еще сколько раз мы пропустили Васю, пусть это будет число k. Тогда Катя может занять место max(1, j - k)
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
    Задача Е.
    С помощью суффиксных массивов, можно сравнивать за логорифм две подстроки. Можно почитать на e-maxx-e.

    Решается с помощью динамики dp[i][j] кол-во способов разбить суффикс начинающий в символе i, если первое слово заканчивается не раньше j - 1символа.

    Перебераем i и j. находим такое минимальное k, что подстрока с i по (j - 1) символ лексиграфически меньше чем подстрока с  j по (k - 1) символ.
    Если такое k нашлось, то dp[i][j] = dp[i][j + 1] + dp[j][k], иначе dp[i][j] = dp[i][j + 1].
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Хешами тоже прекрасно сравниваются.
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
        ну да) я просто первоначально по другому писал и мне надо было не просто сравнивать, узнавать меньше, больше или равно, хотя в конечной реализации только сравнивал на равенство)
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Дык хешами можно сравнивать больше-меньше.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            И как же хешами сравнить две подстроки на больше меньше?
            • 13 лет назад, # ^ |
                Проголосовать: нравится +5 Проголосовать: не нравится
              Бинарным поиском вычисляем наибольший общий префикс. Следующие за этим общим префиксом буквы (или их отсутствие) и определяют порядок.
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                А, я просто подумал что ты за O(1) предлагаешь. Это понятно. 
            • 13 лет назад, # ^ |
              Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
              При небольшом количестве символов можно было бы утверждать, что у больших строк большие хеши. Но с 3000 символов - не понятно как, самому хотелось бы узнать.
              ***
              ссори, пока набирал уже ответили)
              • 13 лет назад, # ^ |
                  Проголосовать: нравится +1 Проголосовать: не нравится
                С помощью хеша это не возможно, так как берётся по модулю, да и вообще ваше утверждение не верно что если больше строка то и хеш без модуля больший. 
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Нафиг хеши и суфструктуры. Можно сверхтупой динамикой за квадрат посчитать lcp подстрок одной строки.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      >>Если такое k нашлось, то dp[i][j] = dp[i][j + 1] + dp[i + 1][k], иначе dp[i][j] = dp[i][j + 1].

      Мне кажется, ты хотел написать dp[i][j] = dp[i][j + 1] + dp[>>j<<][k]. Или я не прав?

      И кстати, как находить такое k быстрее чем бинарным поиском со сравнениями за O(logN)? Иначе итоговая ассимптотика должна равняться O(N^2 log^2N).

      Этот пост уже можно считать "некро", но если ты еще помнишь суть описанного - ответь плз, интересно :)

      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
        да действительно была ошибка)
        Ну наверное можно и хешами сравнивать за O(1), чуть выше как раз хеши обсуждались.
        Хотя я делал используя суффексные массивы . Я искал наибольший совпадающий префикс за O(log(N)), не использую бинарный поиск.
        int k = j;
        for (int q = 13; q >= 0; q--) {
           if (c[q][i] == c[q][k]) {
                i += (1 << q);
                k += (1 << q);
           }
        }
        k++;
        примерно так, но еще там разные условия нужно добавить.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    У меня вроде немного по другому задача E ДП. хотя наверно тоже самое, но без суфф мас.
    F[i][j] - кол-во способов разбить строку с 1 по j символ, при этом последнее слово это подстрока i..j. Теперь увидим какие у нас могут быть переходы, перейти мы можем только в позиции вида 
    F[j + 1][q], где q = x..n, т.е мы можем дальше поставить слово с j+1 по q, но так как если прибавить 1 символ то по прежнему можно ставить такое слово то можно составить и i..q+1, i..q+2 ... i..n. Но если менять все состояния это долго, то так как будет изменятся от некоторой позиции до конца, то мы будем изменять именно первую такую позицию, а все остальные заполнятся по ходу ДП с помощью F[i][j + 1] += F[i][j]. Таким способом нам не придётся менять всё, изменим одну, а она дальше по порядочку всё прибавит до конца.

    Осталось определять эту позицию первую, тут опять же понятно что если у нас есть i..j, то составлять мы будем с j+1 по некоторую q. Посчитаем z-функцию для подстроки j+1 .. n.
    Теперь если на z[j + 1] >= j - i + 1, то это значит что всё начало нового слова которое мы поставим будет совпадать с началом которое стоит последнее, так как нам нельзя ставить одинаковые, то получаем что первая позиция с которой мы сможем поставить наше первое слово это j + (j - i + 1) + 1. 
    Теперь если z[j + 1] < j - i + 1, то получается что нужно проверить что первый символ после не совпадающих частей больше ли он соответствующего символа в последнем слове, если да то от него можно опять же ставить. Ну а вообще это просто действуем как и при сравнении строк. Сложность выходит O(N^2).

    Сложно как то обьяснил, вот код для наглядности: http://pastebin.com/xgbLHGDx


  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    E
    значит будет писать динамику по a[i][j] - количество способов сложить наш словарь так до j символа что все корректно и последнее слово a[i][j]. теперь у нас есть слово a[i][j] и мы хотим найти все слова в которые он может перейти. Понятно что если нам будет подходить слово a[j+1][x], то нам и будет подходить слово a[j+1][y] где x<y<=n, т.к. если к последнему слову дописывать символу хуже не станет. Поэтому нам надо найти ближайшее такое слово. И так, просчитаем f[i][j] - максимальный общий пефикс i-ого и j-ого суффикса (допустим l = f[i][j]). Тогда если l < j - i + 1 и s[i + l] > s[j + l + 1], то следующего слова не существует (потому что следующее слово начинается на l букв нашего слова и дальше символа меньше нашего). Иначе замечаем если l > j - i + 1 (то есть дальше идет наше слово и ещё что-то), то ближайшее слово будет a[j+1][j+1+j-i+1], и оставшиеся случай когда l <= j - i + 1, тогда ближайшее a[j+1][j+1+l] (можно написать проще, совместить два последних варинта в a[j+1][j+1+min(l,j-i+1)]), но это ближайшее слово, поэтому из каждого a[i][j] я могу перейти в a[i][j+1] - то есть как бы взять последнее слово в своем списке и расширишь.

    вкратце:
    инициализация a[1][1]=1 (индеск с 1), для каждого a[i][j] делаем переход в a[i][j+1] и в a[j+1][j+1+min(f[i][j], j-i+1)] если не выполняется условие (f[i][j]<j-i+1 и s[i+f[i][j]] > s[j+1+f[i][j]]).

    P.S. Прошу прощения за много букв.
13 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится
Две задачи в течении часа на компиляции... как то вообще не здорово сегодня было.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Скиньте, пожалуйста, ссылку на задачи.
13 лет назад, # |
  Проголосовать: нравится +55 Проголосовать: не нравится
На мой взгляд, отвратительный контест. Делать полный реджадж во время контеста - это просто свинство. Авторам за шутки вида "elevenTH" и "twelveTH" надо руки поотрывать. Я не обязан знать английский язык, этого нет в правилах. Многие вообще учат немецкий или французский...

Накосячили - сделали реджадж. Ну тогда они должны поставить аксептедам время, на которых мы раньше получали OK! У нас например, разница во времени минут 200 будет. А это много мест вверх. 

Самым умным решением было на все вопросы по F отвечать "read the problem". Условие задачи никак не соотносится с действительностью. У меня есть одно объяснение случаю вида "человек не дружит сам с собой" - это авторы на самом деле не дружат с некоторыми своими частями тела, особенно где шапка расположена.

Авторам голову надо оторвать. Зла не хватает.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Еще большее свинство это реджаджить ОКи!!! Через 2 часа возвращаться к сданым задачам и оптимизить их - просто издивательство.
    На скоко я знаю по правилам АСМ это недопускается - был прециндент на полуфинале, и в итоге оставили ОК.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Ну да...А еще ждешь час вердикт а потом править надо что то, тоже не вариант...
      • 13 лет назад, # ^ |
          Проголосовать: нравится +5 Проголосовать: не нравится
        да жесть, у нас был момент когда в очереди были 3 различные задачи..
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится
    На момент написания у комментария пользователя NALP вышел стоит (+5). Удивлен, что кто-то минусонул)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Коль я лично на эту тему аппеляцию написал
13 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
У кого-нибудь остался семпл к задаче Н. На сайте чёт недоступно
  • 13 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    хахаха)))) ты удивлен, что сайт недоступен??
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Нет недоступность опенкапа это нормально. Просто сам сайт работает а страница с условиями нет))
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
H задача просто жесть) квадрат, если писать все в long long то ТЛ 17 зато правильное решение.
Если писать в unsigned int то ВА 19. Если хранить в long long а пересчитывать используя тип unsigned int - то ТЛ 10!!! (не понимаю вообще как!) В итоге засабмител 5 или 6 решения используя в различных моментах типы int, unsiged int, long long... Мы так и не поняли почему - все решения ТЛ 10, кроме 1 - оно зашло как то на шару)) Кароче полное извращение а не задача, похоже на угодай какое решение писали авторы (нахера такой ТЛ впритык тоже не ясно)

За задачу F надо руки сломать автору, потому что половину условия пришлось придумывать!
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Санёк думаю про задачу J можно сказать то же самое. А с Н я до сих пор сижу на дорешивании пихаю))
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      ))) Ну в J с условием все понятно, задача боян и фиг с ней.
      Но формат вывода это пзц, и нам еще повезло - там +1 или +2 - догадалить про 11th))
      Бесят меня авторы))
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится
    В задаче H мы считали х в unsigned, а y - в long long. Зашло без проблем. 
    Ну как без проблем, +5 или +6, точне не помню, но это я в другом месте набажил)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Вань поверь я так и делаю
    • 13 лет назад, # ^ |
      Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится
      Я так и делал - ВА 19, заменил на long long все - сначала АС, а потом ТЛ (после реджаджа)
      Ну понятно a, b и m тоже unsigned int (когда было ВА)
      • 13 лет назад, # ^ |
          Проголосовать: нравится +3 Проголосовать: не нравится
        У вас в решении было что-то вроде y + 1 + (x >> m)?
        • 13 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
          ага, если скажешь что не правильно буду благодарен) (ну интересен случай почему не работает когда и x и m - это unsigned int)
          • 13 лет назад, # ^ |
            Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
            Когда битово сдвигаешь что-то больше, чем на количество бит, то это undefined behavior. У нас была функция
            long long shr(unsigned a, unsigned b){
                if(b > 31) return 0; else return a >> b;
            }
            • 13 лет назад, # ^ |
              Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
              не это понятно что я проверял что если m > 31 то 0 (почему у тя возврат идет в long long?)
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              а почему функция не unsigned возвращает? у меня лично без "(m > 31? 0 : (x[i] >> m))" стандартный тест не проходил, поэтому так и написал. (y - long long, отсальное - unsigned)
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Нам самим интересно :) В дебагере смотрели при m = 60:

            y = 0

            (x >> m) == 0

            y + 1 + (x >> m) == 1

            А потом бац:

            y = y + 1 + (x >> m),

            y == 129 ----- тут то мы и прозрели.

            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              нет я имел ввиду что строчка та была, но отдельно проверка для m>31 стояла - так что это не наш баг))
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                Может у вас типа y + 1 + (x >> m) работает так.
                x >> m = MAX_UNSIGNED.
                1 + (x >> m) = 0
                y + 0 = y
                ???
                PROFIT
                • 13 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится
                  и как такое может быть? Если m = 0 то (x >> m) = x, а если 0 < m <= 31 то вернется беззнаковое число меньшее x
                  • 13 лет назад, # ^ |
                    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
                    Я не об этом. надо привести (x >> m) к long long перед тем, как прибавлять к этому 1. Иначе может переполнится. И ты к y прибавишь не 1 + (x >> m), а 0.
                    • 13 лет назад, # ^ |
                      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
                      C++ вычисляет эту сумму слева направо. Самый левый операнд типа long long, так что остальные слагаемые автоматически приведутся к этому типу. Вот если написать y в конце, тогда будет в точности описанный эффект.
                    • 13 лет назад, # ^ |
                        Проголосовать: нравится +4 Проголосовать: не нравится
                      С++ не гарантирует в каком порядке вычисляются операнды за исключением операций &&, ||, оператора запятая и тернарного оператора.
                      • 13 лет назад, # ^ |
                        Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится
                        Спецификация языка не гарантирует. Но это не значит, что конкретные компиляторы не гарантируют. Компилятор MSVC,  например:




                        Про GNU C не знаю, но сказал по факту: ни разу не видел, чтобы порядок слева направо нарушался. Если кто-то знает пример — в студию.
                        • 13 лет назад, # ^ |
                          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
                          Да вроде бы и g++ тоже слева направо вычисляет. Думаю, если бы это было не так, я бы уже несколько лет назад на это нарвался на TC или том же OpenCup. В частности, я нередко в одном ифе пишу сначала проверку того, что индекс не выходит за границы структуры данных, а только потом (через &&) обращаюсь к элементу по этому индексу.
                          • 13 лет назад, # ^ |
                            Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
                            Да я уже понял. Просто Фефер сказал о порядке, в котором подготавливаются операнды — он действительно неопределен. Однако само суммирование всегда происходит слева направо, потому что по спецификации сложение является лево-ассоциативной операцией. То есть компиляторы не имеют права делать вычисление суммы в каком-то другом порядке.

                            Для оператора && порядок вычисления операндов фиксирован.
                            • 13 лет назад, # ^ |
                              Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
                              А, ну тогда да! Вот на этом, кажется, попадался :)
                              Кстати, в Pascal точно можно было прописать директиву компилятору, чтобы операнды вычислялись слева направо. В C++ тоже логично было бы чему-то такому же быть. Но я его не знаю :)
                              А вообще здесь же огромный тир с ногами. Можно ведь ещё писать так, что операнд слева будет зависеть от результата вычисления операнда справа...
                              • 13 лет назад, # ^ |
                                  Проголосовать: нравится 0 Проголосовать: не нравится
                                Да, и вот пример такой фигни:

                                y = ++x + --x;
                                • 13 лет назад, # ^ |
                                  Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
                                  Это, я так понимаю, undefined behavior в спецификации языка. А что по конкретным компиляторам?
                          • 13 лет назад, # ^ |
                              Проголосовать: нравится 0 Проголосовать: не нравится
                            Ну это то и так понятно. Даже учебники от создателей языка C и C++ рекомендуют использовать && для проверки индекса массива. Так что с этим знаком точно все правильно во всех компиляторах.
                            • 13 лет назад, # ^ |
                              Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
                              Ну, мы люди простые, учебников не читаем, всё только на собственной шкуре испытываем %)
                      • 13 лет назад, # ^ |
                          Проголосовать: нравится 0 Проголосовать: не нравится
                        И вообще, при чем здесь вычисление операндов? Я говорил о порядке суммирования, когда операнды уже вычислены.
                    • 13 лет назад, # ^ |
                        Проголосовать: нравится 0 Проголосовать: не нравится
                      Так а почему значение в watch этого выражения показывается неправильно?
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Ништяк запихал. Удалив из кода всё что может хоть одну лишнюю итерацию сделать
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Считал точно также. Не заходило, пока не перебил на статические массивы вместо векторов.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Хех. Не заходило, пока массив m(8000 чисел) не стал считываться как unsigned int вместо long long.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    UPD:
    Извращение не задача а весь контест)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    В H можно было xi в обычных intах хранить и считать без извратов, а yi в long (long). Зашло без проблем.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Про TL в H в упор - соглашусь. Фигня какая-то, а не TL.  :-(((
    Надеюсь, меня за TL в I ругать не сильно будут... :-[ это, если бага, то моя. Мое решение 3 секунды работает на тестах. Но я ж его не оптимизил... написал, как есть, и на 2 домножил)

    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Претензий к I мало у кого будут - дойти не все успели) Мне Серега на контесте сказал - это точно твоя задача(кто еще мог такое дать?))) Не понял что там за магические eps в решении?..
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Это не магия...)) это 8:00 в субботу... ничего лучше не придумал просто(
13 лет назад, # |
  Проголосовать: нравится +20 Проголосовать: не нравится
Да кстати, есть здесь авторы ЭТОГО контеста? Или они сидят и отмалчиваются, тихо наблюдая как контест поливают грязью? Может они смогут нам что-нибудь объяснить, например свою мотивацию к подобным действиям? Да и в конце концов то, хочется просто взглянуть этим людям в глаза. Эх, да забыл, точнее взглянуть им в аватар. =)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Ну одну мотивацию мне кажется я знаю - как обычно контест сделан вчера вечером или седня ночью)))
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
      Это объясняет баги, но не объясняет маразматические форматы output'а 
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Я думаю что такой формат вывода - это типа подготовка к финалу. На это также можно списать нарочитую непонятность условий :)
        • 13 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
          Тогда предложение Олегу Богдановичу провести парочку внезачетных раундов по задачам с финалов, чтобы народ освоился, понял, для чего такие издевательства нужны бывают, ит.д.

          Плюс ко всему, насколько я мог судить из обсуждений на форуме TC и различных блогах, на финале TL обычно выставляется относительно приятный. По крайней мере, непонятно, как наличие или отсутствие модуля/long long в H могло бы при этом привести к TL (если уж это попытка устроить раунд в духе финала)
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            На финале вроде нет ТЛ. Жюри сами вырубают программу, если она долго работает
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              C 2008 или 2009 финал перешел на полностью автоматическую систему.
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                Не полностью, все равно жюри может остановить прогу, или ранить чуть больше. + ручками ставить вердикт и наверно еще че нить)
      • 13 лет назад, # ^ |
          Проголосовать: нравится +2 Проголосовать: не нравится
        Ой забыл написать) половина задач бояны и халяву (сложно поспорить) и авторы решили усложнить их сделав дибильный формат outputа и непонятное условие)))
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    А ты знаешь в СПбГУ всегда любят поизвращатся над участниками... ну в последнее время точно =)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      ты зря) обычно хорошие контесты делают, но про все в последний момент - сам однажды наблюдал, видимо так и в этот раз
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Нет контесты хорошие, я не спорю. Мне нравятся питерские контесты... гораздо больше других... но порой случается fail... но обычно это бывает в паре задач на контест... но сегодня было слишком заметно... 
13 лет назад, # |
Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится
А как решать G ?
Думал над динамикой по дереву. Да так и не придумал.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +10 Проголосовать: не нравится
    Действительно, динамика по дереву. Подвесим дерево, состояние будет (v, x), где v - вершина, x означает, что если мы пойдём вниз по дереву от v, все расстояния до помеченных вершин будут >=x. Ответ для (v, x) складывается из ответа для (v, x + 1) и количества способов, если через какого-то из детей расстояние получилось ровно x. Переберём самого "левого" из этих детей - тогда у нас будет произведение чего-то слева, ответа для этого ребёнка и чего-то справа. Все произведения можно посчитать за O(количества детей), после этого за O(количества детей) посчитать ответ. Правда, надо было писать аккуратно, чтобы не обрадоваться TL'ю после реджаджа и существенному увеличению штрафного времени в результате.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Можно немного подробней. Как посчитать ответ когда мы уже зафиксировали самого "левого" сына? Как зафиксировать тот факт, что в наших сыновьях мы не можем что-то поставить, так что это помешает друг другу. Т.е. внутри одного поддерева понятно как это сделать, а вот как сделать чтобы два поддерева не конфликтовали не понятно
      • 13 лет назад, # ^ |
          Проголосовать: нравится +5 Проголосовать: не нравится
        Они не должны конфликтовать с нашим зафиксированным. Пусть мы зафиксировали первого ребёнка, у которого расстояние ровно x - 1, тогда у всех слева расстояние должно быть >=max(x, c - x - 1), справа - >=max(x - 1, c - x - 1).
13 лет назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится

Присоединяюсь к всеобщему негодованию =)

Кроме всего вышеперечисленного порадовал также СЕ по причине "Compilation timed out", несмотря на то, что на нашей машине код компилировался мгновенно. На клары в духе "Что за дела?" отвечать никто не желал, и лишь спустя эн десятков минут выяснилось, что это ML на самом деле (ошиблись кол-вом нулей) 0_о

Просто нет слов.

13 лет назад, # |
  Проголосовать: нравится -8 Проголосовать: не нравится
Весна пришла просто, вот и божат :)) 
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Хотелось бы узнать, за какую сложность решалась задача I? Решение за O(N3logN) получает ТЛ 15.
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
    Там какое-то читерское решение.
    Посчитаем максимальный ответ для прямоугольников со сторонами не более 20 клеток = Answer за О (300^2 * 20^2).
    Далее на каждом шаге проверяем, существует ли ответ Answer+EPS. Если он существует, то увеличиваем Answer на 1. Утверждается, что таких шагов будет немного и все это влезет в ТЛ. Таким образом мы сократили границы ответа для бинпоиска.

    Такое решение объяснял Сергей Копелиович.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      А можно чуть подробнее про проверку и про увеличение answer на 1?
      • 13 лет назад, # ^ |
          Проголосовать: нравится +5 Проголосовать: не нравится
        А что рассказать?)
        1) Решение за O(N^3logMax) - бинпоиск по ответу, а далее решение стандартной задачи за O(N^3). В целом за O(N^3) мы можем для любого x находить ответ >= x, если такой есть.
        2) Бинпоиск - это слишком долго. logMax = log (10^{16}) ~= 54..
        3) Нашли какой-то ответ. Улучшаем его. Как улучшать? Можно проверять, можно ли получить Answer + 1e-6. Проверяем за O(N^3) и увеличивать на столько, на сколько найдет O(N^3).
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    А как с такой сложностью решать? У нас была дихотомия по ответу (хитрая в лонг лонгах), но там log существенно больше. Но так ва10, потому что или потеря точности или переполнение лонг лонга. На яве с длинкой тоже решение дает ТЛ7. Теперь начинаю сомневаться, что, дописав длинку на С++, пройдет.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Переберем все пары строк (i1,i2) такие что i2>=i1. Будем в полоске между ними искать прямоугольник с макс отношением Sum/(i2-i1+1+length), где length его длина.

      Пусть h=i2-i1+1 и S(i) - сумма всех чисел в прямоугольнике (i1,0) (i2,i). Положим S(-1)=0. Тогда нужно найти такие i и j что (S(i)-S(j))/(h+i-j) - максимально. Пусть оно равно A. Тогда запишем:
      S(i)-S(j)=A*(h+i-j)
      -(h+i)*A+S(i)=(-j)*A+S(j)              (1)

      Слева и справа записаны уравнения прямых (А - независимая переменная). Зафиксируем прямую i и найдем такое j, что абсцисса точки пересечения прямой слева и справа - максимальная (т.е. А - максимальное). Заметим, что при увеличении j угловой коефициент только уменьшается, значит мы в стеке можем хранить прямые, которые принадлежат верхнему огибающему множеству прямых для всех j<i. Тогда бинарным поиском в нем мы можем находить прямую, у которой в пересечении с прямой с левой стороны (1) максимальная абсцисса. Максимум из всех абсцисс и будет ответом для данной полоски (i1,i2).

      Ответ можно хранить в виде пары лонг лонгов (числитель и знаменатель) и при выводе можно даже руками посчитать сколько угодно знаков после запятой.
      • 13 лет назад, # ^ |
          Проголосовать: нравится +5 Проголосовать: не нравится
        Т.е. у вас таки N^3logN? log именно N? Классно...)
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          А у меня решение O(N^3 + N log N log *), авторы наверное про него не знают?
          • 13 лет назад, # ^ |
              Проголосовать: нравится +5 Проголосовать: не нравится
            Не нужно меня во множественном числе) Рассказывай.
            • 13 лет назад, # ^ |
              Rev. 3   Проголосовать: нравится +23 Проголосовать: не нравится

              Решение до которого все додумались – это для каждой полоски за O(N log *) посчитать бинарным поиском ответ. Это решение базируется на том факте, что мы можем для полоски за O(N) проверить больше ли ответ на ней чем какое-то значение. Добавим в тупое решение такую штуку, перед тем как запускать бинарный поиск, просто проверим за O(N) можем ли мы улучшить наш текущий ответ, если можем, то только тогда запускаем бинарный поиск.

              Утверждаю, что если все полоски случайно перемешать, то ожидается log_2 N улучшений ответа, а следовательно и запусков бинарного поиска. Так происходит потому, что случайный элемент последовательности будет примерно медианой, а все меньшие элементы отбрасываем, как результат размер последовательности на каждой такой итерации сокращается вдвое.

              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                Круто) И просто :-) Стоило додуматься.
                Спасибо, Ром.
                • 13 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится
                  А сколько работает авторское решение на макстесте? Интересно узнать.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Да, logN. Там бинпоиск делается в стеке прямых, которых не больше N. Но, как оказалось, работает дольше чем N^3*log(точность).
          • 13 лет назад, # ^ |
            Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
            У меня решение работает за O(N^3). Идея такая же как написал KADR. Но вот бинпоиск в стеке можно убрать. Бинпоиск дает абсциссу точки пересечения текущей прямой и випуклой оболочки. Но если мы уже знаем абсциссу для предидущей прямой, то меньшие асбсцисси нам уже не подходят потому, что они решения не улучшат. Итого достаточно держать один указатель на прямую в випуклой оболочке, которую нам нужно проверять. Но у меня все-равно ТЛЕ на 19. Вернее один раз на 19, а потом тот же код - ТЛЕ 17. Кажется тестирующая система не очень хорошо работает.
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              У нас на контесте идентичные коды давали ТЛ 10 и ТЛ 19. Есть гипотеза о том, что тестирование происходит на нескольких серверах с разной конфигурацией, хотя это было бы очень странно.
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              P.S. Немного оптимизировал и прошло.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    На контесте у меня было N^3*log точности.
    Сейчас додумал просто N*N*N*log N, не поверите, использовать выпуклую оболочку. Доказывать умею :)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Мы на дорешивании пропихнули "тупой" бинпоиск по ответу за O(N^3 * log(точность))
13 лет назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится
Добавлю в копилку негодований.

К некоторым задачам не указали пределы по некоторым переменным.
Например, в задаче M на количество предложений (переменная m), причём на клар отвечали "Без комментариев".
Никаких ограничений (количество символов и т.п.) на данную переменную нет, то есть их хоть 10^1000 могло быть, ассимптотику угадывайте сами.
13 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится
А, и да, условия выкладывать раньше начала тоже очень весело, наверное.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    Это была компенсация за последующую отличную работу сервера :D
13 лет назад, # |
  Проголосовать: нравится +38 Проголосовать: не нравится

а еще меня каждый раз очень радовала строка в условии:

Следуйте формату вывода, указанному в примере, как можно точнее.

  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    +1
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +23 Проголосовать: не нравится
    Это, похоже, традиция. Когда прорешивал старые чемпионаты, не раз встречался с задачами "угадайте какой у нас формат вывода и следуйте ему как можно точнее".
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Подскажите, как задачка К решалась?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    мы её пытались сдать 4 раза и всегда RE 2. а она уже 1.5 часа тестируется на рандомных тестах и ни одного RE :-(
    n/m=q1/b+q2/b^2+q3/b^3... | *b
    n*b/m=q1+q2/b+q3/b^2...
    всё в правой части, кроме q1, меньше единицы. значит, q1:=(n*b) div m; новый числитель:=(n*b) mod m;
    таким образом найдём q1. теперь период появится, когда мы встретим такое сочетание qi и числителя, которое уже было.
    К сожалению, написать мы это, видимо, по-человечески, не смогли.
    Скажите, пожалуйста, как её было решать (или писать) правильно?
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      На контесте тоже кучу раз посылал программу и у неё было то ТЛ 2, то РЕ 2. Оказалось, что там есть дроби, у которых числитель больше знаменателя (не смотря на условия). Как только я добавил n=n%m всё сразу прошло.
13 лет назад, # |
  Проголосовать: нравится +15 Проголосовать: не нравится
Какого!!!!!!!

Во время проведения Гран-При СПб для первого дивизиона произошло несколько существенных сбоев, повлиявших на результат раунда. В частности, Гран-При не стартовал автоматически, после ручного старта Гран-При в результате неполного перезапуска систем были установлены значения Time Limit, равные 20 секунд для всех задач. Также произошло расхождение в тестах для задач J и I (оказавшиеся в системе тесты соответствовали прошлой версии задачи с другим текстовым выводом), приведшее к пересуживанию задач, причём в случае задачи I пересуживание произошло достаточно поздно. Однако на проведение турнира для второго дивизиона эти сбои влияния не оказали.

В связи с этим жюри Открытого Кубка приняло решение считать Гран-При СПб для команд первого дивизиона внезачётным.


Наконец-то удалось написать опенкап (из 4 предыдущих в двух зачли результат в ПЗ, в двух  результат на зимней школе) и очень хорошо написали (3-е место). Могли бы в 10-ку уже попасть в общем зачете и на тебе.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Надо устроить голосование как после Codeforces Beta Round #58.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Ну, согласитесь, что баги в процессе контеста действительно очень сильно повлияли на результаты (в частности, произошёл random_shuffle 2-10 мест из-за rejudge). Так что сделать этот контест внезачётным кажется вполне разумным.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Согласен. Это я так, с горяча написал. Если б вам не срубили G так подло, то как минимум вы бы нас точно обогнали. Но даже 4-е место это хорошо. А теперь мало ли как с Приазовьем выйдет. Мы-то еще собрались ехать в Таганрог. В прошлом году вышел жуткий фэйл. 8 задач за 2 часа, но ни одной не прошло в последние три. В итоге ~50 место.
13 лет назад, # |
  Проголосовать: нравится -19 Проголосовать: не нравится
Я один из авторов контеста.

Во-первых, прошу прощения за технические проблемы во время соревнования: ошибку в условии B, пересуживание по I и J из-за текстовых правок в тестах, общее пересуживание из-за неправильно выставленных TimeLimit-ов. Мне видятся в них две основные причины: доделывание контеста в последний момент и недостаток общий координации. Конечно, есть и чисто технические моменты, но без этих причин большинства проблем, скорее всего, удалось бы избежать. Допущенные ошибки обязательно будут учтены при подготовке следующего чемпионата СПбГУ, который ориентировочно состоится в октябре.

По поводу претензий по задачам выскажу своё мнение.

1. В задаче F, действительно, условие хорошо было бы изначально сделать чётче. Тем не менее, ответы на стандартные вопросы прямо или косвенно следовали из условия. В каком порядке записаны биты — объяснено подробно. Является ли граф ориентированным — нет, иначе как он может быть задан половиной матрицы смежности. Может ли человек быть “другом” самому себе — да, ведь бит для этого есть, и в условии подчёркивается, что отношение “дружбы” — формальное понятие. Можно ли считать, что два одинаковых человека образуют пару — да, потому что не сказано, что они должны быть различны. Примерно этим руководствовалось жюри в своих ответах “без комментариев”.

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

2. Общая претензия по тому, что решения с правильной асимптотикой не проходят из-за Time Limit. Одна из причин — то, что авторы чемпионата СПбГУ обычно пишут решения довольно оптимально. Считаю, что это не то чтобы хорошо или плохо — так есть, это специфика чемпионата, почему бы и нет.

Вообще, ограничения по времени выставляются исходя из того, чтобы решения жюри укладывались в них с двухкратным запасом. Это было неверно локально (не в Кубке, а в чемпионате СПбГУ) в задаче H, где решение жюри работало 1.5 секунды из 2. К моменту, когда мы это заметили, случилось уже много попыток по этой задаче, успешные среди них тоже были, и, опять же, менять ограничения было бы нечестно по отношению к тем, кто уже потратил время на оптимизацию и сдал задачу только после этого.

3. Окончания числительных в задаче J. Тут, во-первых, замечу, что английский — основной язык соревнований ACM ICPC, начиная с четвертьфиналов. Поскольку чемпионат СПбГУ (как и этап Кубка) — это соревнование в формате ACM ICPC, считается, что этот язык достаточно важен. Во-вторых, английский в качестве иностранного изучает подавляющее большинство школьников и студентов. Словом, если в команде из трёх человек нет ни одного, кто бы считал, что с числительными “elevenst”, “twelvend” и “[one hundred] thirteenrd” что-то не так — это достаточное основание для того, чтобы получить по задаче минус и задуматься об этом. Программирование тут, действительно, ни при чём. Но с таким знанием английского в англоязычном условии команда вполне может понять какое-нибудь слово неверно (реальный пример: что такое unidirectional edges?) и из-за этого решать не ту задачу. И программирование тоже будет ни при чём.

Замечу, что некоторые из тех, кто искал проблему в написании числительных, на самом деле выдавали неправильный ответ на тест n = 4.

4. Вообще вывод текста, не несущего информации. Действительно, это сделано с задумкой “как на финале”, там в некоторых задачах приходится выводить не только ответ, но и несколько слов, пробелов и переводов строки, не являющихся необходимыми. Действительно, реализация этой идеи не всегда соответствует задумке (предложения получаются не на английском). На финале также бывает, что форма слова не изменяется из-за стоящего рядом числительного. Не считаю, что такой формат вывода особенно хорош или плох. Он просто бывает, также как и формат, состоящий только из чисел.
  • 13 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится +21 Проголосовать: не нравится
    1,3. Как мне кажется, если уж вы даете такую задачу, в которой есть какие-то неоднозначности в условии, или какие-то хитрые случаи в задаче никак не связанные с идеей решения, то нужно давать на это семплы. Это в частности касается задачи J и F. Почему просто нельзя было в задаче J дать семплы со всеми возможными случаями написания окончаний, по моему это было бы очень демократично по отношению ко всем участникам. И тоже самое в задаче F. 

    И еще, вы все время говорите, "было бы нечестно по отношению к тем, кто уже потратил время на оптимизацию", "поскольку это нечестно по отношению к командам, решившим эти вопросы самостоятельно". Такое ощущение, что у нас контест не по решению задач а по тому "как нахачить да запихать правильное решение" или "как понять авторов". 

    Я считаю, что если среди 100 команд хотя бы 20 команд не могли сдать асимптотически правильное решение или не поняли условие, то в таком случае задача плохая, и авторы её недоделали. 

    И еще, раз вы говорите, что "авторы чемпионата СПбГУ обычно пишут решения довольно оптимально", почему тогда не сделать ограничения 3x от авторов или даже 4x, если кто-то и упихает палево, ничего плохого не произойдет, а вот если у 20-30 команд не пройдет совершенно правильное решение, плохое точно случится, как например в этот раз. 
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Да, условия можно было сделать лучше.

      Тем не менее, мне кажется, что у условия F, если его внимательно прочитатьтолько одно правильное понимание. Поэтому, если сделать объявление с пояснениями — это нечестно по отношению к командам, которые уже потратили время и отнеслись к условию внимательно.

      Тут вопрос, что ценить больше
      — удобство контеста или внимание участников. В этом случае я пока склоняюсь ко второму.
      • 13 лет назад, # ^ |
          Проголосовать: нравится +26 Проголосовать: не нравится
        Понимание в F действительно одно, а вот авторское решение неверное. В данной задаче под парой человек понимается два человека. Так что надо было не объявление делать, а править решение жюри, чекер и делать реджадж. Ну или более щадящий вариант для участников - поправить только чекер, чтобы он допускал верное понимание и альтернативное (в котором пара может сосоять из одного человека).
      • 13 лет назад, # ^ |
          Проголосовать: нравится +5 Проголосовать: не нравится
        По поводу F. Цитата из условия: "Чтобы воспроизвести некую ошибку, вам необходимо найти пару человек, у которых нет общих друзей".
        Во-первых, я не представляю "пару человек" из одного и того же человека. А вы? :-)
        Во-вторых, лично я при написании условия придерживаюсь правила: если легенда не подходит к сути задачи, то надо придумать другую легенду (или вообще без легенды обойтись). Просто "дружбу" из условия русским (и английским) словом "дружба" назвать нельзя.


        • 13 лет назад, # ^ |
            Проголосовать: нравится -8 Проголосовать: не нравится
          Ну, я представляю пару человек из одного и того же человека. Видимо, я слишком долго учился математике. (Психиатра прошу не предлагать!)

          А насчёт легенды — поскольку некоторые члены жюри действительно работают ВКонтакте, возможно, они знают, о чём говорят.
          • 13 лет назад, # ^ |
              Проголосовать: нравится +29 Проголосовать: не нравится
            Психиатра не предлагаю!
            Видимо, чтобы решить эту задачу, необходимо работать ВКонтакте :-)
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится
        Нееееееет там много пониманий))
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Не согласен, что “асимптотически правильные решения” = “правильные решения”.

      В чемпионатах СПбГУ традиционно есть задачи на оптимизацию, в которых нужно не только придумать решение с правильной асимптотикой, но и реализовать его достаточно оптимально. Да и в других контестах это бывает часто. Считаю, что такие задачи имеют право на существование.
      • 13 лет назад, # ^ |
          Проголосовать: нравится +4 Проголосовать: не нравится
        Никогда не понимал этого. Всегда вместо "реализовать оптимально" получается запихать. Приходится ногами и руками пропихивать правильное решение.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          А иногда и не очень правильное))
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Задумка тут такая.

          Если команда A умеет придумывать максимальный тест и мерить на нём время работы, она не получит лишний минус, а сразу поймёт, что нужно оптимизировать. Если команда B что-то из этого не умеет, она получает лишнее штрафное время, послав неоптимальное решение. Логично, ведь B по этому показателю хуже A.

          Далее, если команда C умеет находить наиболее трудоёмкие места в своём решении и оптимизировать программу именно в них, она сделает это и сдаст задачу достаточно быстро. Если команда D этого не умеет, она может сдать задачу “пропихиванием” — например, перебирая замены одних типов данных на другие, меняя eps, переставляя местами условия в ифах и циклы. Но обычно команда D тратит на это гораздо больше реального времени и штрафных попыток, чем команда C. Ну и опять же логично, ведь C по этому показателю хуже, чем D.

          То есть чем лучше команда понимает, что происходит, тем больше метод тыка (“пропихивание”?) превращается в методичную оптимизацию, и тем лучше у команды результат по задаче (реальное время, количество попыток). Я считаю, что это нормально.

          Конечно, это всё работает “в среднем”: какой-то команде может повезти, и она, не понимая этого, сразу напишет правильное решение, а другая соптимизирует лучше, чем нужно, а потом окажется, что на самом деле программа просто виснет на неучтённом крайнем случае. Ну так и при придумывании асимптотически правильного решения, реализации и отладке такие случайности тоже бывают.
          • 13 лет назад, # ^ |
              Проголосовать: нравится +11 Проголосовать: не нравится
            Поиск узких мест к сожалению очень часто превращается в гадание - на серверах Олега размер процессорного кеша и разрядность процессора отличаются от того, что на машинах участников, поэтому часто приходится оптимизировать непонятно что в программе, которая работает 0.3 секунды на макстесте (например, у нас после rejudge на этом кубке упала G, хотя на макстесте работала меньше секунды).
          • 13 лет назад, # ^ |
              Проголосовать: нравится +8 Проголосовать: не нравится
            Вот только недавно встретился с проблемой - у меня профайлинг в программе показывал, что 90% времени процессор проводил в флойде-воршолле, соотвественно - оптимазил его. Оказалось, что это потому, что у меня весь массив не помещался в кеш - на сервере он помещался и там были тормоза совершенно в другом месте. Соответственно дома та программа работала 5 секунд, а на работе - 3 минуты. При том что на работе тактовая частота процессора даже выше. И это я молчу про разницу в языках программирования...
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Чтобы избежать гадания о разнице между компьютерами, можно использовать страницу, где указаны параметры сервера, а также пробный тур.
            • 13 лет назад, # ^ |
                Проголосовать: нравится +14 Проголосовать: не нравится

              Представляю, как на пробном туре команда решает 3 задачи:

              Задача A) Определить размер кэша процессора.

              Задача B) Определить тактовую частоту процессора.

              Задача C) Определить, какая именно модель процессора используется на тестирующем сервере.

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

              • 13 лет назад, # ^ |
                Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
                Нечто подобное было в 2003 году на олимпиаде в Вологде. См. третью задачу пробного тура :)

                Причем задача специально давалась, чтобы участники могли примерно понять насколько их локальный компьютер быстрее или медленнее проверяющего.
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                Кстати, было бы неплохо.

                Когда я ещё участвовал в ACM ICPC, мы на пробном туре посылали Флойда, чтобы узнать, на скольки вершинах он ещё укладывается в две секунды. Как примерная оценка того, насколько проверяющий компьютер быстрее или медленнее локального — вполне работает.

                С кэшом не заморачивались, всё равно не умели пользоваться.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Не понимаю причем тут оптимизация (про Н), жюри согласно правилом должно было выставить ТЛ 3 секунды (ты сам это признаешь). А в 3 секунды оптимизить эту задачу врятли бы пришлось, только если избранным
        • 13 лет назад, # ^ |
            Проголосовать: нравится -8 Проголосовать: не нравится
          Нет, на сервере Открытого Кубка решение жюри работает 1.053 sec, две выставить вполне нормально. Это на питерском тестирующем компьютере оно работает полторы секунды.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +17 Проголосовать: не нравится

    Даже тот факт, что ни одна команда (из ~50 решивших) не сдала задачу F ни с первой, ни со второй попытки, говорит о проблемах с условием.

    Мы, например, только после конца контеста узнали, что от матрицы смежности на самом деле дана нижняя половина, это легко было не заметить. А какая логика в дружбе человека с самим собой – до сих пор не понимаем, хотя задачу на контесте сдали :)

    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится
      Ну про нижнию половину еще можно согласиться, так как там написано, что в i-й строке дано i бит, а в семплах все по одной букве из-за дополнения до 6-ти бит.
      Вообще вот тут стоило дать семл из 7-ми вершин, тогда один момент сразу бы прояснился. 
      По поводу "нигде не встречается слово различных" и "дружбы человека с собой".
      Если вы так формально подходите к условию, то не делайте сказочку вообще.
      Условие "Дан неориентированный граф. Найти две вершины(возможно совпадающие), такие, что между ними не существует пути длинны ровно 2 ребра. В графе могут быть петли" было бы тогда идеальным.

      P.S.
      Еще вспомнилась задача с ОпенКапа не помню какого и когда:
      K. Фантазия
      Имя входного файла k.in
      Имя выходного файла k.out
      Ограничение по времени 2 секунды
      Ограничения по памятие 64 мегабайта
      Кончилась.
      Формат входных данных
      В первой строке даны 2 числа:n и m (0 < n,m < 100500).
      Формат выходных данных
      В единственной строке выходного файлы выведите значение такого-то выражения
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Да, это действительно показатель того, что что-то не так. Обычно находятся команды, которые сдают задачу не сразу, видят монитор по ней и усиливают внимание. Если даже у них не получилось сдать с чистого плюса, дело всё-таки скорее всего в условии.

      А вот скажи, пожалуйста, как координатор CodeForces по задачам:

      1. Ты бы объявил по F и про то, что человек может быть другом самому себе, и про то, что люди в паре могут совпадать, так?

      2. Считаешь ли ты, что из условия эти два пункта не следуют ни прямо, ни косвенно?

      3. Как быть с тем, что команды, сдавшие задачу до объявления, потратили на неё больше ресурсов? Это неважно по сравнению с тем, насколько непонятно было условие?
      • 13 лет назад, # ^ |
          Проголосовать: нравится +20 Проголосовать: не нравится
        1. Да. Мы, бывало, и менее важные вещи объявляли.

        2. Конечно, по условию это не запрещается. Но часто в задачах с неформальными условиями, где многое четко не прописано, не бывает неестественных случаев в тестах.

        3. Такое уже было на Open Cup. Те, кто сдавали до клары и тратили на это много попыток, писали апелляции, и им снимали попытки.

        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          3. Попытки можно компенсировать, но есть же ещё реальное время, потраченное на задачу.

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

          Если же считать, что условие сложно понять, но при этом оно однозначное — объявление помогает всем, кроме тех команд, которые уже сдали задачу. Считаешь ли ты это достаточным основанием, чтобы не делать объявление, и почему?
          • 13 лет назад, # ^ |
            Rev. 3   Проголосовать: нравится +8 Проголосовать: не нравится
            Считаю, что если с условием есть проблемы, то объявление обязательно нужно делать. У нас же соревнование по программированию, а не по угадыванию условий.

            Вообще, любое объявление на любом контесте помогает всем, кроме тех команд, которые уже сдали задачу. Значит, давайте вообще не будем делать объявления - тогда все будут в абсолютно равных условиях :-)
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
    А какая была ошибка в условии В ? Она и сейчас в http://158.250.33.215/~ejudge/files/opencup/oc9/gp5/exuralsel-r.pdf  присутствует ? 
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Да. Там в формальном определении написано, что король может ходить только по восьми диагоналям. На самом деле король может ходить во все 26 соседних клеток, а формальное определение противоречит второму примеру в условии. Объявление об этом было, но довольно поздно.
      • 13 лет назад, # ^ |
        Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится
        Как сказал Гена: "я знаю как эту задачу писать, но не представляю как её можно отладить". Так и получилось: кодил, кодил, а тест из условия так и не пропихнул (получалось 4 хода, вместо 3-х). Отсылки - это уже были вариации на тему "а может я не так условие понял".
        Даже любопытно, как жюри удалось отладить свои решения. Неужели путем визуализации тороидальной трехмерной шахматной доски?  =)
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          У нас на этом тесте тоже получается 4, правда решение все равно не укладывается в TL (работает 10 секунд).
  • 13 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Представьте, что вы сами пишете этот контест...

    разумеется, у вас ничего не проходит с первой попытки, ибо в ТЛ нужно еще затолкать. Вы не понимаете, какая логика была у авторов задачи, и почему у вас ВА. И поэтому вы шлете все подряд - эдакий перебор по условию, потому что вдруг авторам взбрело в голову сделать так, а не по другому. Потом у вас посередине контеста отбирают ОК по задачам, а условия вы уже выкинули. А еще вам надо вывести на китайском языке предложение, но вы не можете вспомнить правил китайского языка, а в условии или семплах нет объяснения. А потом авторы вам скажут, что вы обязаны знать китайский, потому что это язык половины населения нашей планеты.

    ... некрасиво, не правда ли?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Легенда в задаче F нормальная: многие социальные сети позволяют добавить самого себя в качестве френда (ЖЖ, например), это даже отображается как взаимная дружба. Но почему пара в ответе может состоять из одинаковых номеров? Нам это вообще в голову не приходило, а правильный вариант решения, в котором это возможно, отправили по случайности. Цитата из условия:

    «вам необходимо найти пару человек, у которых нет общих друзей»

    Слово «человек» без всяких кавычек, про формальность понятия «друг» говорится, а про понятие «человек» — нет. Если автор задачи считает, что пара реальных людей может состоять из одного человека, то пусть он обратиться к помощи психиатрии. Дальше:

    «выведите пару порядковых номеров пользователей, не имеющих общих «друзей»

    К какому слову относится причастный оборот? Если к слову «номеров», то где в условии сказано о «дружбе номеров»? Если к слову «пользователей», то любой человек, понимающий по-русски, поймет это так: нужна пара номеров двух различных пользователей — потому что слово «пользователь» во множественном числе, и автор задачи не может игнорировать этот факт.
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +4 Проголосовать: не нравится
      Авторы извинились, ошибки признали (не ошибается тот, кто не работает), контест признан нерейтинговым (чему не все рады). Что уж так кулаками после драки размахивать, авторов к психиатору отправлять ?
      Некрасиво, по-моему...
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Только если считает. Если не считает, то пусть ничего не делает. Никого конкретно я не отправлял, потому что я не знаю, кто автор именно этой задачи.

        Гасса заявил, что с условием этой задачи все в порядке (это признание ошибки?), я сказал, что это не так, вот и всё.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Гасса заявил: "В задаче F, действительно, условие хорошо было бы изначально сделать чётче", "два последних момента действительно лучше бы пояснить в условии заранее"
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            «Тем не менее, ответы на стандартные вопросы прямо или косвенно следовали из условия.»

            «Можно ли считать, что два одинаковых человека образуют пару — да, потому что не сказано, что они должны быть различны.» (вот это мне не нравится особенно)

            «Примерно этим руководствовалось жюри в своих ответах “без комментариев”.»
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              В общем, как давно известно, один и тот же текст люди могут воспринять совершенно по разному. Это и к "обратиться к помощи психиатрии" тоже относится. 
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                В комментариях повыше написано так:

                У меня есть одно объяснение случаю вида "человек не дружит сам с собой" - это авторы на самом деле не дружат с некоторыми своими частями тела, особенно где шапка расположена.

                Авторам голову надо оторвать. Зла не хватает.

                Неужели я написал еще хуже?

                По поводу пояснения по задаче F от Гассы. Структура того абзаца примерно такая: «конечно, хорошо бы написать подробнее, мы согласны, но это не необходимо, потому что и так можно догадаться (что равносильно заявлению «условие корректно и однозначно».)
                • 13 лет назад, # ^ |
                    Проголосовать: нравится +3 Проголосовать: не нравится
                  У меня еще написано про "кулаками после драки размахивать".
                  Ночь прошла, эмоции, вроде, должны были поулечься.
                  Мы теперь добиваемся, чтобы авторы окончательно раскаялись, публично посыпали голову пеплом, повторно обещали учесть все ошибки, поклялись, что "никогда больше" и т.п. ? Вопрос риторический. 
                  • 13 лет назад, # ^ |
                      Проголосовать: нравится 0 Проголосовать: не нравится
                    Нет. Мы хотим чтобы авторы поняли, что ошибки были не только до контеста, но и во время - пересуживания акспетедов и ответы No comments
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Не очень красиво согласен.. Но я видел скоко было эмоций у московских команд во время соревнования (я про все команды а не только свою), и вбольшинстве отрицательные.. Хотя я каждый раз когда заходила задача радовался сильнее чем на "обычных" контестах - это означало что я наконец понял что имели в виду авторы, но отрицательных эмоций хватило с лихвой
  • 13 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Может ли в графе быть петля - нет, т.к. это не обговорено в условии, а википедия говорит, что в большинстве случаев графом называется объект без петель. Я правильно понял, как именно ответы на стандартные вопросы прямо или косвенно следуют из условия?
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      На "Википедию" официально ссылаться неприлично. А в идеале так вообще условия должны быть сформулированы так, чтобы задачу мог решить человек, не знакомый с такими техническими терминами как граф.
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится
        Так этого термина и не было в условии)
        • 13 лет назад, # ^ |
            Проголосовать: нравится +7 Проголосовать: не нравится
          Вы бы хоть почитали условие перед отправкой:
          english: The following n lines contain encoded graph ...
          russian: Следующие n строк содержат закодированный граф ...
          • 13 лет назад, # ^ |
            Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
            Судя по плюсам, условия не читало как минимум трое человек :)
            Могу рассказать ужастик в тему: если бы в своё время хотя бы один из троих человек в моей команде прочитал первое предложение в условии одной задачи, мы бы сейчас, скорее всего, готовились ехать на финал. Но, в самом деле, кто же читает первое предложение?..
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Нет. Использованное умолчание: если не сказано, что чего-то не бывает, то это бывает.

      В математике пара, состоящая из двух одинаковых объектов — вполне разумное понятие. Это же не множество. Точно так же, как “несколько” в олимпиадных задачах не значит “хотя бы два”.
      • 13 лет назад, # ^ |
          Проголосовать: нравится +2 Проголосовать: не нравится
        Ну, в задаче F нигде же не сказано, что строка с номер i описывает только первые i бит матрицы смежности. Получается, набор тестов был не полным - должны были быть еще тесты, где есть куча всякой фигни в строке помимо описания графа. Ну это если следовать такому пониманию...
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Нет, это сказано. i-я строка содержит i закодированных бит. Тут не придраться.

          Если ссылаться на математические отпределения, могу предоставить определение графа из учебника, изданного на кафедре дискретной математики КНиИТ СГУ. Там написано, что пара (V, E) с петлями и мультиребрами  - это псевдограф. А вот уже без мультиребер и петель - это граф.

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

          Я и сам бы хотел увидеть эту “развитую систему умолчаний” где-нибудь записанной. Действительно, когда у жюри она n лет одна, а у участников k лет другая, возникают такие проблемы.
          • 13 лет назад, # ^ |
              Проголосовать: нравится +23 Проголосовать: не нравится
            Просто мне вот интересно, не смущает ли организаторов чемпионата СПбГУ, что во всех остальных контестах если есть непонятные моменты в условии их объясняют (вот это чудо не в счет)? Не смущает, что задача F могла быть в такой же формулировке с запретом брать пару (A, A)? И какой вообще смысл давать такие махровые бояны исключительно ради подколок в условии? Вы реально видели задачи такого рода на финале? В таком виде соревнования по программированию превращаются в что-то вроде "Смотрите какие мы крутые, всех участников подкололи". Если задачи готовятся в последний момент и приходится давать бояны - ну хорошо, дайте их в нормальном виде. От того, что люди потратят на боян час из-за непоняток в условии или незнания английского языка (кстати, согласно правилам кубка его знать вовсе не обязательно) кому то станет лучше? Для подготовки к выводу на финале есть тренировки. Для всяких приколов есть специальные контесты. Ну вы еще дали бы задачу про сумму квадратов, ага
  • 13 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    То есть пересуживание аксептеда не смущает, а вот обидеть бедных людей, которые, в большинстве своем, перебором сами догадались и потратили время - это ни-ни?
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Пересуживание аксептеда смущает, из-за этого раунд нерейтинговый.

      К формулировке задачи F это не имеет отношения.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +12 Проголосовать: не нравится
    3. Безусловно, "английский — основной язык соревнований ACM ICPC".  А основной язык Открытого Кубка - русский. Не все команды, участвующие в Кубке, участвуют также в ACM ICPC и усиленно изучают английский. На чемпионате СПбГУ делайте, что хотите. Но если ваш контест - этап Кубка, дополнительно позаботьтесь об остальных участниках.

    P.S. У моей команды с J благодаря хорошему знанию английского проблем не было, однако вполне понимаю жалобы тех, у кого они были.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Кстати, а как об этом узнать? В единственной странице правил, где упоминается русский язык, он оба раза упоминается вместе с английским.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Вероятно, об этом можно сделать вывод из того, что страница правил существует только на русском языке (поправьте, если я неправа).
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Снарк вот говорит, что официальных языка два. И это действительно означает, что команда имеет право знать только один из них. А в секторах, где команды англоязычные, русский язык (чтобы объяснить правила) знают координаторы.

          Согласен, претензия к условию J и последующим “no comments” — по делу.
13 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится
Мда, судя по обсуждению, контест был просто шикарен. Как я рад, что забил на него и вместо этого пошёл на концерт "Эпидемии" =)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Зато весело)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Действительно весело, зато лишний раз потренировался пропихивать задачи в последние пару минут контеста, ведь моя задача H перетестировалась за час до конца контеста, а увидел я это и того позже.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        О, у нас такая тренировка на четвертьфинале была. Потом ещё потренировались апелляции писать ]:->
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    я из-за эпидемии пропустил срм юбилейный
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Фигассе... так это что, получается, участники группы тоже не собирались писать юбилейный SRM?
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Где можно скачать условия? А то на сайте ссыль не работает
13 лет назад, # |
  Проголосовать: нравится +31 Проголосовать: не нравится
Каждый тест начинается строкой с единственным числом n (1 <= 8000), определяющим количество списков.

По-моему, приведенный в условии задачи H (и в русской, и в английской версиях условий) факт, просто прекрасен своей неоспоримой очевидностью.
К счастью, необычность задания этого ограничения большинством участников просто игнорируется, все курят^Wвидят то, что и предполагали авторы :)
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    Да, мы тоже это заметили где-то в середине контеста. Объявления не было потому, что и формально дальше есть ограничения, из которых следует в точности 1 <= n <= 8000, и неформально понятно, что имелось в виду. Объявлять это — неоправданная трата времени участников, примерно как объявлять об опечатке, не мешающей понять смысл.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Есть ли какая-то возможность скачать сабмиты, отправиленные на туре? Разумеется, нашей команды, хотя если можно посмотреть других - было бы вообще замечательно. Я склоняюсь к ответу "нет", т.к. не могу найти ссылку на вход именно в контест (который давно over, но есть вкладка "отправки"). Может, у кого-то в кэше?

Вообще наличие такой возможности было бы очень полезно, т.к. в идеале на месте написания должен отсутствовать интернет (блокироваться трафик на иные адреса) и возможность считывать флеш. Хотя на практике, на мой взгляд, выполняется это редко. Я, например, просто забыл переписать :(

  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
    В принципе, есть:
    http://158.250.33.215/~ejudge/team.cgi?contest_id=???? - и последние четыре циферки надо угадать.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      10135 - первый дивизион
      10145 - второй, я угадал?
      Угадать так: там есть кнопка standings, у нее url оканчивается на res???? , где последние четыре пять циферок - искомые.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Да, действительно все работает. И решения скачиваются. Спасибо. Еще интересно, навсегда ли так "зависают" прошедшие контесты, или через какое-то время они становятся недоступны. Например, доступны ли сейчас так контесты прошлых лет?

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

          Они не зависают, а просто остаются в системе.

          Некоторые из них потом делают виртуальными.

          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Поэтому в кавычках. Правда, при отсутствии ссылок на существующий ресурс, сказать, что он "завис в воздухе" достаточно уместно. Или в каком-либо ином пространстве :) Все-таки вышеописанный "алгоритм" доступа к страничкам конеста однозначно не интуитивен...
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Особенно учитывая, что вариантов id контеста порядка 10000, а ведут на контесты из них видимо не больше 200-300
              А уж считая только те, к которым подходит пароль от Кубка...
              • 13 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                • 13 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится
                  Уже не так полезно :) .

                  В прошедшие этапы можно войти, используя на opencup.ru в левой панели внизу меню “Выбрать этап”.

                  В прошедшие сезоны — пока только в предыдущий (в левой панели вверху — “Выбрать сезон”).
                  • 13 лет назад, # ^ |
                      Проголосовать: нравится 0 Проголосовать: не нравится
                    Можно полюбопытствовать, а кто это запилил и по чьему реквесту? Чтоб знать, кому спасибо сказать :)
                    • 13 лет назад, # ^ |
                        Проголосовать: нравится 0 Проголосовать: не нравится
                      Снарк закрыл, потому что кроме нормальных контестов там есть ещё служебные (типа голосования) и не совсем готовые (виртуалки по старым соревнованиям), а убрать оттуда только их ejudge не позволяет.
                      • 13 лет назад, # ^ |
                        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
                        Не, в данном случае наоборот "запилил" = "открыл".
                        • 13 лет назад, # ^ |
                            Проголосовать: нравится 0 Проголосовать: не нравится
                          Не понял.

                          Видимо, совсем не владею диалектом.
                          • 13 лет назад, # ^ |
                              Проголосовать: нравится 0 Проголосовать: не нравится
                            Блин.
                            Раньше нельзя было зайти в старые контесты. Теперь можно. Вопрос был в том, кто и по чьей просьбе сделал так, что можно.
                            • 13 лет назад, # ^ |
                                Проголосовать: нравится +5 Проголосовать: не нравится
                              Снарк сделал. Прочитав тот комментарий, с которого начинается эта ветка.
13 лет назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится
Хотел бы все-таки вернуться к задаче В. По условию N<=4, для N<=3 все очевидно, при N=4 все тесты делятся на тривиальные и непонятные. То есть решение невозможно проверить, например, тестами меньшей размерности, перебором и т.п.
Вопрос: чем тогда доказывается правильность ответа на тест из условия? Авторским решением? А правильность авторского решения?
Не то, чтобы я ставил под сомнение авторское решение, но обычно так не бывает.
Конечно, не надо засвечивать идею по нерешенной задаче, но действительно есть какое-то доказательство правильности авторского решения?  

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

    Там же можно просто граф игры построить и по нему всё посчитать.

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

    Разве не так?

    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Так в том и проблема, что НЕ просто граф этой игры построить. Гена для этого написал кучу кода, сжал граф до 17 с чем-то тысяч вершин, и в итоге получил WA.

      Накосячил, так накосячил. Смущает только, что правильность любого решения по этой задаче можно показать только на элементарных тестах, где ответ = 1. А для всех остальных тестов только поверить, что ответ - верный.
      Хотя, может быть, с этим утверждением я ошибаюсь. 

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

        Хмм. Я написал для интереса решение задачи B.

        Оно у меня тоже выдаёт 4 хода на сэмпл..


        • 13 лет назад, # ^ |
          Rev. 3   Проголосовать: нравится +3 Проголосовать: не нравится
          Хотя, т.к. ошибка почти наверняка в сжатии графа, то потестировать это можно. Берем произвольную позицию на исходной доске, делаем все (<= 130) возможные ходы. Отображаем исходную и производные позиции на сжатый граф. Там производные позиции тоже должны быть соседями исходной, и других соседей быть не должно.
          Как нюанс, надо рассматривать раздельно позицию при ходе белых и черных.
          Интересно, я прав?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    > Вопрос: чем тогда доказывается правильность ответа на тест из условия?
    Честно говоря, я не знаю.

    Насколько можно понять из каталога с задачей, ответы могли быть проверены при помощи brute force solution. Действительно, если чёрные выигрывают за три хода, то, вероятно, перебор с тривиальными отсечениями работает не очень долго. И написать его не очень сложно.