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

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

The contest is mov

Добро пожаловать на 2014-2015 CT S02E02: Codeforces Trainings Season 2 Episode 2 (CTU Open 2011 + misc). Продолжительность тренировки — 4 часа 30 минут. Тренировка открыта как для команд, так и для индивидуальных участников. После ее окончания вы можете дорешивать задачи тренировки или поучаствовать в ней виртуально, если не смогли принять участие одновременно со всеми. Пожалуйста, участвуйте в тренировке честно.

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

Условия задач будут на английском языке, ведь мы же готовимся к ACM-ICPC!

Удачи!

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

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

Why?

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

Isn't it better to move CF Round rather than Training Episode? Rounds are always on different days, while having Training Episodes on certain day would allow teams to include it to their regular trainings schedule.

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

    I also expected the CF round to be moved instead. Maybe it just has lower priority since it's Gym... and can be done in virtual participation anyway.

    And now I'm also curious why this got many downvotes in a short time.

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

    Considering the number of participants (CF Round 267: 4k7, last gym training: less than 400), we can clearly see why the training should be moved.

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

      I was not talking about the amount of the audience, was I?

      Those 4.7k would participate on any day of the week, because it's ok to have cf rounds on different days and it's not difficult to schedule a 2-hours round for a single person comparing with scheduling 5-hours contest for teams of three.

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

How is problem F solved ?

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

Anyone can help me find my mistake on J? Here's my code : http://pastebin.com/T5vuiMHG

I get WA on test 2, but I can't see the test data and I have no idea where could I be wrong (can't think of any test case).

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

Why can't I see other solutions after the end of contest?

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

The author of the problem A probably was angry with life at the moment of creating it...

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

    Hehe, you apparently don't have much experience with CTU Open. Nasty problems are relatively common there (which is normal considering there's a technical university involved).

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

Please someone discuss problem E (Invasion) and problem F (Intergalactic Mortgage). It will be really helpful.

I could not find a way for the problem E and got TLE in problem F using brute force.

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

    Well obviously you got TLE, there are millions of cases in the input file. Not like it'd be so simple.

    E: remember the min. distances to each vertex from the bad ones, update it using Dijkstra with breaks

    F: linear recurrence relation

    And while I'm at it, D is a simple O(NM) DP.

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

      remember the min. distances to each vertex from the bad ones

      How can I do that? Would you please explain in details please?

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

        In one array. Do you know Dijkstra's algorithm? You remember distances there.

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

      My question on problem F: What you mean by linear recurrence relation? I had simple linear recurrence relation too, but tried to find answer in O(n) for every test case, but it gave TLE. Can you please tell more about your solution? Is your solution faster? P.S. I had an idea about matrix exponentiation, but I think it is not necessary here

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

        This talks also about linear recurrences and their solutions. There is a formula that allows you to compute the result in O(1).

        I don't know what you mean by necessary, an O(N) solution obviously can't solve a million test cases in a second. Sure, you can use matrix exponentiation, you can use double exponentiation, whatever works in O(1) or . Not O(N).

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

          Thank you. By necessary I meant that there may be solution that is much easier. Most of contestants solved it too fast.

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

            I don't know what kind of easier solution than googling a formula you have in mind, but I assure you no bruteforce would work.

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

          my soln with complexity O(log N) is giving TLE for Problem F. :(

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

            It's not because of that, it's because you're using cin on doubles.

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

              Care to explain why cin on doubles should be avoided?

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

                Because it's slow, why don't you guess...

                (I don't know why it's slow, I don't have insight into C++. But it doesn't matter.)

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

      The solution of problem E is do dijkstra for each consul and do the dijkstra only when the distance of bad node to good node is < k, the demostration of the time of the algorithm is:

      the time of dijkstra is the number of number of times update one node, in this case the algorthm update each node k times, the time in general is O(k*nodes + k*edges)

      Zorry for my english.

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

Any ideas on G?

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

    Maybe, hypothetically speaking, there could be a heuristic — but the input size is large as hell, so I'd say that you need a sweepline algorithm that maintains the set of lines ordered by their intersections points with the sweepline. It has a name, google it — or you can think about it yourself, it should be similar to the convex hull trick in DP.

    It feels like CTU Open problemsetters always tell themselves "so, for a seriously hard problem, let's have reasonably obvious but nasty geometry".

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

Any suggestion on how to solve problem B ?

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

    take one number, use algorithm described in statement while number != 1, and save in std::map<long long, int> number of steps:
    let d[x] be the number of steps to conver first number to number 'x'
    then use algorithm to convert second number to 1 and while converting choose the shortest way to do convertation

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

How to solve I?

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

    Optimized backtrack, probably. The authors suggest doing stuff like "if there's a cell with 1 neighbour, put a tile there first".

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

Это оффтопик, но последние два дня при попытке создать запись в блоге появляется страница "Codeforces временно недоступен".

Это только у меня так?

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

Прошу совета:

Как доказать в E что просто обновлять мин. расстояния из каждой базы до других зайдет в TL, как оценить кол-во операций? Одна дейкстра может работать за MlgN, т.к. расстояние до 100, то можно сделать bfs за M, но, это все равно выглядит не очень быстро.

F, использование формулы за O(1) (x*r^(n) — y(1 — r^n)/(1-r)) для получения остатка через все время дает WA, видимо из-за переполнения double до inf в тестах с большим нашим платежом и процентом, как сдать?

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

    в Е там типа каждая вершина обновится максимум 100 раз

    в Ф у нас был косяк с r == 0.

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

      Вершина да, но просмотров ребер может быть больше.

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

        ну там O(M * k) получается.

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

          http://1drv.ms/1ttasBH картинка

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

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

            ну так не более 100 раз же дейкстра пойдет вниз по полному графу.

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

              Ну раздели граф на 4 части, 1/4 сделай полным графом, 3/4 подвесь деревьями с разных сторон, тогда легко сделать чтобы было 300 просмотров полного графа. Как строго доказать? Почему таким образом, мы, например, не можем посчитать расстояние между всеми вершинами меньше чем за N^3.

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

                я не понимаю как 300 просмортров полного графа может быть.

                вот наше решение.

                массив dist[] — кратчайшее расстояние до вершины i от какой-то уже построенной базы.

                массив used[] — плохая ли вершина i или нет.

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

                При таком решении не пойму как 300 раз можно пройти через вершину.

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

                  Поиск в ширину посещает всего N вершин, но работает за O(M), т.к. он может просмотреть все ребра, понимаешь разницу? Посетишь ты N, пометишь вершины 100 раз, верно, но кол-во просмотров ребер вроде может быть другим.

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

                  Все, понял строгое док-во большое спасибо.

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

Can someone tell me what is test case 2 on problem H ? I wrote a dp solution, but it keeps giving me WA