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

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

Задача А. Новогодний стол

Тарелки должны касаться края стола, а значит, их центры должны лежать на окружности радиуса R - r (см. рисунок). 

В случае если тарелки имеют наибольший возможный радиус для данного стола, их центры будут располагаться в вершинах правильного n-угольника, вписанного в эту окружность. Задача сводится к тому, чтобы найти длину стороны вписанного правильного n-угольника и сравнить ее с 2r. Формулу для длины стороны a = 2(R - r)sin (π / n) нетрудно вывести. Для этого нужно рассмотреть прямоугольный треугольник, нарисованный зеленым цветом.

При реализации нужно было аккуратно выделять случай, когда выполняется равенство r = (R - r)sin(π / n) (*). Из-за вычислительной погрешности правая часть может получиться больше левой, что приведет к ответу "NO" вместо "YES". Сравнение в таких случаях нужно проводить с участием маленького ε
a + ε < b вместо a < b ,
a < b + ε вместо a ≤ b.
Константу ε нужно выбирать таким образом, чтобы она была меньше возможной разности между точными значениями a и b, если они не равны. В частности, при вычислениях по формуле (*) с учетом ограничений задачи эта разница может составить примерно 7· 10 - 7. Поэтому ε   = 10 - 7 достаточно, а ε  = 10 - 6 - уже нет. 

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


Задача носила чисто реализационный характер. Заметим, что номер отправленной открытки однозначно определяется номером друга и множеством открыток, имеющихся у Александра в данный момент. Разберем пример из условия. 
  1
 {1} -
 {1, 2}21
 {3, 1, 2}
 {3, 1, 2, 4}3
Первый столбец таблицы содержит множества открыток, получающиеся у Александра после получения каждой очередной открытки. Номера в множествах записаны в порядке приоритетов Александра. Каждый i-й из следующих четырех столбцов содержит номера открыток, которые получит i-й друг из соотвествующих множеств. Наша цель - выбрать для каждого друга самую предпочтительную открытку из его столбца. 

Заметим, что чтобы по текущему множеству Александра и номеру друга определять, какая открытка отправится этому другу, не обязательно знать все множество Александра. Достаточно только двух самых приоритетных открыток. Поэтому для каждого момента времени найдем две самых приоритетных открытки среди имеющихся. Используя их, определим, какая из них отправится каждому другу (посчитаем столбцы таблицы). Потом выберем элемент с максимальным приоритетом в каждом столбце. Получаем решение за O(n2).


Решение 1. Предположим, что ответ на задачу k. Если среди заданных чисел более k одинаковых, то ясно, что мы не сможем их все использовать (потому что мы не можем использовать в одном снеговике одинаковые комы), поэтому оставим из таких комов k, остальные отбросим. Далее отсортируем радиусы в порядке невозрастания. После этого любые два кома с номерами i и k + i различны. Составим снеговиков из комов с номерами (1, k + 1, 2k + 1), (2, k + 2, 2k + 2), (3, k + 3, 2k + 3) и т.д. Если общее количество оставшихся комов не меньше 3k, то у нас всегда получится сделать k снеговиков. Теперь, когда мы умеем отвечать для фиксированного k на вопрос, можно ли составить k снеговиков, можно подбирать k бинарным поиском.

Решение 2. Посчитаем количества комов каждого размера и будем жадно выбирать три наибольшие кучки, брать из них по одному кому и отбрасывать их, и так до тех пор, пока возможно. Почему это правильно? Пусть ответ на задачу k. Если в каких-то кучках больше k комов - будем считать, что их там k, потому что остальные комы мы все равно не используем. Правильность алгоритма докажем через 
Утверждение: если в каждой кучке  ≤ k комов, при этом суммарное количество комов  ≥ 3k, то можно сделать ход по алгоритму. 

Утверждение верно, потому что по принципу Дирихле найдутся хотя бы три непустые кучки. Если есть хотя бы 3 кучки размера k - можно беспрепятственно сделать k шагов алгоритма. Если таких кучек одна или две - первым ходом мы обязательно уменьшим их и перейдем к ситуации для k - 1. Если кучек размера k вообще нет, мы тоже после первого шага получим кучки размером  ≤ k - 1 и суммой  ≥ 3(k - 1). Таким образом, мы всегда сможем сделать k шагов и получить ответ k.  

С точки зрения реализации второго решения удобно посчитать количества кучек с каждым размером комов (при помощи сортировки и "сжатия координат") и использовать set для работы с этими количествами. Время работы обоих решений - .


Решение 1 (жадность). Оптимальный порядок решения задач - в порядке возрастания (неубывания) сложности. При этом задачи, решенные до Нового года, нужно отправлять в 0:00, решенные после Нового года - сразу после их решения.

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

Итак, предположим, что в оптимальном ответе есть пара задач, сложности которых идут в порядке убывания. Тогда есть две задачи, решаемые подряд и обладающие этим свойством. Предположим, они обе решаются до Нового года. Тогда от смены их порядка суммарное штрафное время не изменится (а значит, не ухудшится). Если обе задачи решаются после Нового года, то их вклад в общее штрафное время (T + ai) + (T + ai + aj), где T - время начала решения первой из них (с номером i), ai - время решения первой задачи, aj < ai - время решения второй задачи. При перестановке этих двух задач получаем штрафное время (T + aj) + (T + aj + ai), что меньше чем (T + ai) + (T + ai + aj). Осталось рассмотреть случаи, когда одна из соседних задач, стоящих в "неправильном" порядке, "пересекает Новый год". Эти случаи рассматриваются аналогично.

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

Решение 2 (динамика). Сначала, как и в предыдущем решении, выберем наибольшее количество самых простых задач, которые Геннадий успеет решать за отведенное время. Остальные задачи отбросим. Переберем задачу, которая будет решать непосредственно в Новый год (0:00). Остальные задачи, кроме нее, нужно разбить на два множества, одно из которых решается до Нового года, другое - после. Задачи во втором множестве нужно решать в порядке возрастания сложности (известный факт для тех, кто участвует в соревнованиях по правилам ACM). В первом множестве порядок решения неважен. Отсортируем заданные числа по возрастанию и посчитаем динамику d[i][j][k] - наименьшее пенальти, которое можно получить, решив первые i задач, из них j - после Нового года, причем последняя задача после Нового года решена в момент k. Заметим, что по (i, j, k) однозначно определяется количество задач, решенных до Нового года, и суммарное время на их решение. После подсчета динамики вспомним про задачу, которая решалась непосредственно в 0:00 (и которая не участвовала при подсчете динамики). Переберем момент времени до Нового года, когда началось ее решение, и учтем остальные задачи при помощи посчитанной динамики.


Сначала научимся решать подзадачу для одного яруса: составить гирлянду длины s из лампочек ровно k цветов, так чтобы никакие две лампочки одного цвета не шли подряд. При этом варианты, отличающиеся порядком цветов, пока считаем одинаковыми (при необходимости мы всегда успеем домножить на k!). Решение подзадачи нам нужно лишь для k ≤ s ≤ 5000, поэтому считаем динамику за O(s2):
a[s][k] = a[s-1][k-1] + a[s-1][k] * (k -1).
Это были бы числа Стирлинга второго рода, если бы не условие, что одинаковые лампочки не могут идти подряд.  

Далее, посчитаем динамику d[i][j] - количество способов сделать гирлянду для первых i ярусов (с учетом правил), чтобы на i-м ярусе было ровно j различных цветов. Состояний будет порядка L (общей длины гирлянды), потому что на каждом ярусе различных цветов не больше, чем длина яруса: j ≤ li (!). Переходы тоже можно делать за O(L), если учесть тот факт, что множества цветов различной мощности различны (!!). Действительно, положим d[i][j] = Amj * a[l[i]][j] * (сумму всех d[i-1][k]), а потом вычтем варианты, при которых множества на i-м и (i-1)-м ярусах получаются одинаковыми. Количества размещений Amj = m(m - 1)... (m - j + 1) можно предпосчитать, так они нужны только для j до 5000. 

Таким образом, авторское решение работает за O(L + s2) (L ≤ 107, s ≤ 5000), причем не использует деления (только операции умножения и сложения по заданному модулю).


Начнем с того, как выполнить проверку кандидата на центр симметрии (xc, yc). Рассмотрим все точки, симметричные относительно него для (xi, yi). Они имеют вид (2xc - xi, 2yc - yi). Необходимо выяснить, правда ли, что все они, кроме не более k точек, содержатся в множестве {(xi, yi)}. Это можно сделать за бинарным поиском (предварительно отсортировав заданное множество). Однако существует более быстрый способ проверки за O(n). Заметим, что если изначально точки (xi, yi) были упорядочены, скажем, по возрастанию x, а при равенстве x - по возрастанию y, то точки вида (2xc -  xi, 2yc - yi) получатся в порядке, обратном порядку сортировки. Причем вне зависимости от центра (xc, yc). Поэтому если проверять точки (2xc -  xi, 2yc - yi) по порядку, можно просто двигать указатель с конца в отсортированном массиве (xi, yi).

Из предыдущих рассуждений следует, что если множество имеет центр симметрии, то для первой точки (в порядке сортировки) парная n-я, для второй - (n-1)-я, и т.д. Учитывая, что k точек могут не иметь парных, переберем первые (k+1) точку с начала массива и (k+1) с конца. Для каждый пары таких точек найдем середину соединяющего их отрезка и выполним ее проверку за O(n). Асимптотика решения - O(nk2)

В заключение пару слов о порядке сложности задач. Сложность задачи - величина субъективная. Особенно когда приходится сравнивать идейную задачу с простой реализацией и реализационную задачу почти без идеи. В результате у разных участников получились разные списки предпочтений. Не могу не признать, что порядок, выбранный при подготовке контеста, оказался не совсем адекватен по отношению, например, к количеству решивших задачи, а тем более мог не понравиться кому-то лично. Тем не менее скажу пару слов в его поддержку. А именно, каким принципами мы руководствовались, когда его выбирали.

Количество баллов за задачу - это в первую очередь ее "цена". Умение решать идейные задачи, ИМХО, должно цениться выше, чем умение решать реализационные. Потому что реализацию на уровне задачи B может научиться писать каждый. А вот идея с сортировкой по задаче D на моих глазах не пришла нескольким сильным и опытным участникам. Что касается порядка задач - никто не заставляет вас решать задачи строго по порядку. Ничего плохого нет, если вам быстро приходит идея по задачам C-D, и вы решаете их раньше B и получаете много баллов. Многие так и поступили. Тем более есть текущее положение участников, которым можно руководствоваться при выборе задач.
Разбор задач Codeforces Round 100
  • Проголосовать: нравится
  • +110
  • Проголосовать: не нравится

»
12 лет назад, # |
  Проголосовать: нравится +86 Проголосовать: не нравится
.
»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Мне понятно почему ε   = 10 - 10 достаточно, но не понятно почему ε   = 10 - 7.
Объясните пожалуйста кто-нибудь.
Заранее спасибо.
»
12 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
Спасибо Наташ за контест. Е клевая задача. F я пока не придумал
»
12 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
интересно, кто-нибудь решил задачу D 2ым способом, который приведен в разборе? :о
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится
    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится -17 Проголосовать: не нравится
      даже не знаю чему удивляться: их заумности или глупости?..
      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится +18 Проголосовать: не нравится
        Не очень логичное высказывание от человека, который ее не решил на контесте. 
        К тому же, вы могли бы доказать жадный алгоритм, если бы узнали про него? На opencup'е было достаточно примеров задач, когда есть очевидный и казалось бы верный жадняк, который валится на тестах.
        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится -17 Проголосовать: не нравится

          по-моему, доказательство жадного алгоритма в задаче D было вполне очевидным. ведь там написано: решить наибольшее кол-во задач. значит начать решать стоит с самых легких. а сдавать необходимо ближе к новому году. самая близкая дата к новому году - сам новый год. а то, что я слил контест, никак не относится к нерациональному решению #2.

»
12 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Задача E, подсчет первой динамики
>a[s][k] = a[s-1][k-1] + a[s][k] * (k -1)
Разве не a[s][k] = a[s-1][k-1] + a[s-1][k]*(k-1)?
И еще в сложности опечатка
>O(L + ss)
должно быть O(L + s2)
»
12 лет назад, # |
  Проголосовать: нравится +21 Проголосовать: не нравится
Задачи E и F - великолепны, обе интересные, не слишком сложные, но при этом идейные и красивые. А тесты по F, которые повалили жадники (как минимум мой и Капеля), заслуживают отдельных аплодисментов )). 
Мне кажется один из главных недостатков Codeforces на данный момент, это излишняя простота первых задач. Ну не дело это, когда топ участники за первые 10 минут на перегонки сдают три задачи. Так вот очень порадовало, что несмотря на объединение обоих дивизионов, в этот раз первые задачи были вполне интересными. 

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +12 Проголосовать: не нравится
    в Div1 сильно ощущается разница между самыми сильными (красными, рейтинг под 2600-2700) и самыми слабыми (фиолетовые, рейтинг около 1700, как я). Иногда многим фиолетовым сложно решить даже 2 задачи, поэтому не надо оценивать сложность, опираясь только на топовых участников.

    Вчера да, первые задачи были достаточно простые, но ведь это был раунд не Div1 only. Так что все нормально.
    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +28 Проголосовать: не нравится
      Есть очень тонкая грань между стандартными и простыми задачами. И вот на классических Div1 контестах проявляется серьезный перепад в сторону стандартных. Те кто знаком с идеей заранее сдают ее мгновенно (как раз верхняя половины), а те кто нет - вязнут. 
      Например можно дать вторую задачу, на дерево отрезков. Топ участники сдают за 3 минуты, средние за 10, те кто его не знает, тупят весь контест и не сдают. Просто потому что не зная дерево отрезков, самому его не придумать.
      А можно дать задачу, про окружности, где любой, кто умеет рисовать окружности имеет шанс ее решить и сдать. Где надо хоть сколько-нибудь подумать.
      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Я думаю, что большая часть(почти все) кто в Div.1 знают одно из дерево отрезков, дерево фенвика, sqrt-декомпозиция, sparce-table и т.п.
        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

          Не умею писать дерево отрезков, не знаю, что такое sparce-table)

          • »
            »
            »
            »
            »
            »
            12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Дерево фенвика, sqrt-декомпозицию?
            • »
              »
              »
              »
              »
              »
              »
              12 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Умею, умею) Да, хотя бы одно из этого списка все знают.
        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится +3 Проголосовать: не нравится
          Я не умею ничего из перечисленного. (ну разве что почти умею дерево отрезков) *продолжает медитировать над Корменом*
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    в этот раз раунд был совместным и задача А была чересчур сложной для многих, в B тоже многие увязли, так и не дойдя до утешительной задачи)
    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      На самом деле, А была на обычную школьную геометрию 8-9 класса, проблема в том, что многие ( и я в том числе ее уже забыли к этому времени =).
      • »
        »
        »
        »
        12 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

        а такая школота, как я, из 8 класса вообще ее не проходила еще :-)

        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится +9 Проголосовать: не нравится
          Это издержки современной системы образования...
        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          участие в олимпиадах любого уровня предполагает дополнительные знания))
          • »
            »
            »
            »
            »
            »
            12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            ну, кроме олимпиад по физкультуре:-)
            • »
              »
              »
              »
              »
              »
              »
              12 лет назад, # ^ |
                Проголосовать: нравится +1 Проголосовать: не нравится
              не знал, что в школе на уроках физкультуры преподают историю физкультуры и олимпийских игр.
      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Из геометрии там требовалось знать лишь как определить в прямоугольном треугольнике катет, если известна гипотенуза и противолежащий угол. Этому, кажется, даже не в 8, а в 7 классе учили.
        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится +8 Проголосовать: не нравится
          Тригонометрия в 7ом классе? Чем же в школе остальные 4 года занимаются?
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +6 Проголосовать: не нравится
    В задаче F самые "убойные" тесты - 200000 точек, лежащих на одной прямой с одинаковыми интервалами. Это тесты 16, 17, 18. Они также хорошо валят ТЛ-решения, потому что там какой центр не выбери, почти для каждой точки найдется симметричная, поэтому шаманские отсечения не очень помогают. 
    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +5 Проголосовать: не нравится
      Да точно, с этим я затупил, когда проверял свое решение генерировал квадрат 500 х 500, и думал, что куда уж хуже )). А было куда :)
»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Кто-то может сказать, почему WA здесь?
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +2 Проголосовать: не нравится
    Вот тест попроще, на котором это решение тоже дает неверный ответ
    12
    1 1 1 2 2 2 3 3 3 4 4 5
    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится
      Спасибо за тест! Я у себя нашел ошибку, хотя и подозревал в чем была ошибка :)
»
12 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится
По-моему решение 2 в D по факту пользуется доказательством жадника, так что странно, что до него догадывались, а до жадника - нет :o)
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Я, вот, провел рассуждения полностью аналогичные первому абзацу разбора жадности: надо отсортить задачи в порядке возрастания сложности и сдавать их либо в 00:00, если решена до Нового Года, либо сразу после окончания написания, если это было сделано уже после Нового Года. А потом решил что раз это задача Д, то надо писать динамику. Написал какую-то стремную динамику, в которой использовал еще левый факт. В итоге она упала и унесла 5-е (ну или 6-е, не считал точно) место.
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    А как Вам такой вариант доказательства:
    Пусть задачи решает Геннадий, а отправляет не он, а его сокомандник Х. Естественно, что Х, может отправить только решённую задачу. Время на отправку каждой задачи для Х установим равным 0 - т.е. он может её отправить сразу после того, как её решит Геннадий. Время на решение каждой задачи для Геннадия нам известно из условия
    Ничего не напоминает? :)
    Классическая задача на алгоритм Джонсона для двух станков.
    • »
      »
      »
      12 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

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

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

        Да дерево отрезков мне вообще не нужно!!!
        Я просто по алгоритму Джонсона сортирую массив по минимуму для первого исполнителя, а после 12-00 начинаю отправлять вторым исполнителем готовые, вот и всё.

        UPD: Если бы в задаче нужно было ещё время на отправку решения, то задача 1:1 ставала задачей Джонсона и очень похожей на вот эту. В ней кстати есть тесты, где время второго исполнителя равно всё время нулю, т.е. тесты типа именно рассматриваемой задачи из контеста.

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

          Прочитала постановку задачи на e-maxx.ru.
          На вид задача другая, так что алгоритм Джонсона тут ни при чем.

          Нам же не надо минимизировать суммарное время решения задач, оно вообще-то фиксировано и от порядка не зависит.

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

          • »
            »
            »
            »
            »
            »
            12 лет назад, # ^ |
              Проголосовать: нравится -24 Проголосовать: не нравится
            Хорощо, идём дальше на пути переформулирования исходной рассматриваемой задачи.

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

            Вот так приблизительно, если Вы это хотели услышать.

            Извините конечно, но от дальнейшей дискуссии вынужден отказаться, так как завтра утром ещё на работу вставать, а до того желательно выспаться... :)
            • »
              »
              »
              »
              »
              »
              »
              12 лет назад, # ^ |
                Проголосовать: нравится +7 Проголосовать: не нравится
              Из чего следует, что я это хотела услышать?
              Я вообще ничего не хотела услышать, извините :)
              Хотела донести, что алгоритм Джонсона не является решением более общей задачи, так что для доказательства не годится. Да и для решения тоже, сортировка другая.

              Там, в постановке задачи о двух станках, не ограничено общее время. А в задаче D ограничено.

              Доброе утро :)
              • »
                »
                »
                »
                »
                »
                »
                »
                12 лет назад, # ^ |
                Rev. 2   Проголосовать: нравится -6 Проголосовать: не нравится

                Доброе утро!

                Только ограничений в этой модифицированной задаче Джонсона не одно, а два, что чётко указано в условии задачи:

                1. 2-й исполнитель начинает работать с H2:M2
                2. 1-й исполнитель может работать только с времени H0:M0 до времени H1:M1.
                А так - очень даже симпатичная модификация на тему задачи Джонсона - мне понравилась.

                Хотите решать по-другому - решайте, но ведь широко известен факт, что любая хорошая алгоритмическая олимпиадная задача имеет несколько решений (некоторые утверждают что должна иметь несколько решений)
                .
                Автором в разборе разобрано два подхода к её решению - очень хорошо. Я предлагаю 3-й. И то, что он нашелся говорит только в пользу задачи, а не против неё!
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится +7 Проголосовать: не нравится
                  Вы меня немножко не поняли. Про дерево отрезков я написал не потому, что оно как-то относится к этой задаче, а потому что хотел убедить вас, что вы стреляете из пушки по воробьям, сравнивая это с тем чтобы использовать дерево отрезков для нахождения, например, суммы всех элементов массива(не правда ли глупое использование дерева отрезков?).

                  Я вот, например, честно говоря, до сих пор не очень понимаю как же у вас все-таки получилось свести исходную задачу к алгоритму Джонсона, т.е. я понимаю, что вы добавили несколько каких-то необычных ограничений, и считаете, что алгоритм Джонсона справится и с получившейся задачей. Мне это совсем не очевидно.
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится -25 Проголосовать: не нравится
                  Это Вы не поняли, что я понял Ваш сарказм о "дереве отрезков" и именно поэтому так и ответил, ожидая Вашей реакции...

                  Наверное в чем-то был прав был своим поступком anonymous - я уже начинаю подумывать, а не пойти ли вслед за ним.

                  "Ну до чего же "добрейшие" люди на КФ..."
                  (с)
                  anonymous - Из неопубликованного
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится +19 Проголосовать: не нравится
                  а мне кажется, что sexyprincess91 ответил вам более чем корректно =\

                  да и, честно говоря, по-детсадовски это - обижаться на сообщество из-за того, что вашу неверную точку зрения пытаются опровергнуть
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится +6 Проголосовать: не нравится
                  на фото-детсадовец
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится -20 Проголосовать: не нравится
                  Да не обижаюсь я, а просто константирую реальное положение вещей.
                  Реализация учениками после сделанного разбора описаной модификации алгоритма Джонсона для 2-х станков 
                  на 
                  С++: 1014576
                  на Pas: 1014579.
                  Какие ещё нужны доказательства корректности применения?
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится
                  это тоже по вашему алгоритм  Джонсона для двух станков - 1014593?
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится +1 Проголосовать: не нравится
                  Вообще не понял о чем вы написали в последнем посте, но вот некоторые мои вопросы про ваше сведение, которые вам уже задавали:
                  Мы считаем, что на втором станке мы обрабатываем детали за 0 времени, а на первом за столько, за сколько мы умеем решать задачу?
                  Как я заметил, у нас появилось несколько ограничений на то, когда мы можем обрабатывать деталь на первом станке, а когда на втором.
                  То что я прочитал из описания на e-maxx.ru - это сортировка по минимуму из времени обработки детали на первом и втором станке или что-то вроде того. Минимум - всегда 0? То есть подходит произвольная сортировка? Это же неправильно?
                  Что я понял не так?
                  Или вы все-таки хотите сказать, что с оригинальной статьёй ваше сведение никак не связано, просто вы считаете, что задачку можно свести просто к какому-то алгоритму, который вам чем-то напомнил алгоритм Джонсона? Если да, то мне на самом деле спорить не о чем, так как я ожидал, что вы можете строго формально провести сведение.
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                  Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

                  Мы сортируем как в алгоритме Джонсона: по минимуму: если этот минимум достигается для первого исполнителя - ставим в начало очереди, если для второго - то в конец.
                  При равенстве некоторого диапазона времен для первого исполнителя (локальных минимумов) сортируем по критерию для второго, при равенстве некоторого диапазона времен у второго исполнителя (локальных минимумов)  - по критерию для первого.

                  Так как у 2-го все времена одинаковы (равны 0), то естественно, что сортируем по критерию для первого исполнителя - т.е. ставим в начало очереди.
                  Ну а подсчёт шрафного времени - то уже детали реализации для конкретной задачи.

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится +18 Проголосовать: не нравится
                  "Так как у 2-го все времена одинаковы (равны 0), то естественно, что сортируем по критерию для первого исполнителя - т.е. ставим в начало очереди."
                  Вот это "естественно" как раз и требует доказательства, и в статье на emaxx ниоткуда не следует.

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

                  Что если предположить, что второму исполнителю все-таки требуется какое-то время на отправку задачи? Ну, например, есть 35 легких задач, которые решаются за 10 минут и отправляются за 0, одна задача, которая решается за 20 минут и отправляется за 2 минуты и еще одна, которая решается за 15 минут и отправляется за 1?

                  Оптимальным решением обобщенной задачи D было бы послать сначала 35 легких, потом ту, что решается 15 минут (+16 к штрафу), потом ту, что решается 20 (+37 к штрафу).
                  И закончить в 0:37 со штрафом 53 минуты.

                  А оптимальным решением задачи о станках будет решить 35 легких, потом ту, что решается 20 минут (+22 к штрафу), а потом ту, что решается 15 минут (+ 36 к штрафу). И закончить в 0:36 со штрафом 58 минут.
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится -16 Проголосовать: не нравится
                  Кажется это даже доказывается для всех подзадач вида: время обработки на 2-м станке является константой для всех деталей.
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                  Rev. 2   Проголосовать: нравится +17 Проголосовать: не нравится


                  ну может хватит уже сравнивать тёплое с мягким?
»
12 лет назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится
Разбор задачи B: во второй строке в столбцах идут числа 2 1 2 2. Разве не должны идти 2 1 1 1? Ведь Александру больше нравится 1-ая открытка.
»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Contest 140 Problem E Can anyone explain how d[i][j] is calculated?

All d[i][j] can be calculated in O(L) operations, because sets of colors with different cardinalities are always different (!!). Indeed, put d[i][j] = Amj * a[l[i]][j] * (sum of all d[i-1][k]), and then subtract variants with equal sets on the i-th and (i-1)-th layers. Coefficients Amj = m(m - 1)... (m - j + 1) can be pre-calculated because they are required only for j ≤ 5000.

Thanks in advance..

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

    I think it works like this.

    First of all , the O(L) thing. for each i , when we calculate d[i][j] , j can get a value of at most l[i]. so,

    summing for all i's => l[i] numbers of iteration for each i => l[1] + l[2] + l[3] ... + l[n] => L
    ; hence O(L)

    Secondly ,

    d[i][j] only depends on ( d[i-1][k] , for all k , where 1 <= k <= m ) ;

    About the "subtract" part, if segment i-1 contains x colors , and segment i contains y colors , where x != y , then due these cardinalities do not match , they can never cause any problem for us.

    We only need to subtract the configurations in cases like this when we contribute from d[i-1][k]'s ans to d[i][k]'s ans.

    Finally , the Aj part which can be written as mPj ; its simply nPr = n*(n-1)*(n-2)...(n-r+1).

    1045908 Solution

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

Can someone give the diagram in the first question?

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

prob F when N goes bigger(>3000) how can it be possible to find so many right point?

Test: #15 Input 200000 10 .... Answer 21 ....

//20337403

I used to suppose 0 or 1 is right...