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

Автор cgy4ever, история, 8 лет назад, По-английски
  • Проголосовать: нравится
  • +35
  • Проголосовать: не нравится

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

Update: we added one more SRM on Jan 11th and moved the SRM on 14th to 21st.

So we will have 3 SRMs in January! See details: 705, 706, 707

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

SRM 707 will start in 24 hours!

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

Could people describe some clean solutions for Div 1 250?

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

    I was thinking in terms of BFS initially couldn't get any clue.. Then tried zig zag patterns. No idea at all :(

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

    Is always possible to generate a pattern of the following form:

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

      Thanks! I guess this can be done in O(N2) too, but O(N4) seems safer to code for TopCoder SRMs.

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

      This was my intuition. But how to find the rows and cols required and the zig zag pattern?

      Note that the above pattern does not have any up direction moves.

      We should also consider the symmetric case where we have to do a pattern with no left direction moves.

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

        Take a 50 * 50 grid with all cells "Safe". Note that the initial shortest path is 98. Handle K < 98 separately.

        Then, whenever you are forced to move one step left/up, you increase the shortest path by 2. Thus, if you block enough cells you can make any even number in the range [100, 1000].

        For odd K, use a 49 * 50 grid and repeat the same process.

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

          I don't understand. How do u decide where to place the walls?

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

            Suppose your grid is n * m. You place it in the following order :-

            (0, 1) (1, 1) (2, 1) ... (n - 2, 1)

            (n - 1, 3) (n - 2, 3) (n - 3, 3) ... (1, 3)

            (0, 5) (1, 5) (2, 5) ... (n - 2, 5)

            and so on....

            Basically you're forcing an up movement here and constraints are small enough for you to compute the current shortest path after each addition.

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

          How to prove that this zig-zag approach gives the maximum k, i.e., it gives the maximum number of left steps + up steps?

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

            What do you mean by maximum number? Restating what I said earlier, every "up" movement that you make increases your shortest path by 2, so if K is even and n + m - 2 is even, then you will reach K by forcing sufficient number of "up" movements. The case where K is odd is analogous, just make sure that n + m - 2 is odd.

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

              Here is some code for reference.

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

              Ignore this comment

              Thanks for the reply.

              "if you block enough cells you can make any even number in the range [100, 1000]."

              Say for a 50 * 50 grid, how to prove that 1000 is the upper bound, and not something higher?

              In other words, how to prove max number of "up" movements we can force on a board?

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

            It doesn't. For instance, there's a pattern which can give up to steps but it's too complicated for 250.

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

Solution for Div2 500 and 1000 ? everybody failed Div2 500 .

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

There is an invalid test case in Div2-500

{{"...", ".#.", "..#"}, 4}

Expected (System test output): "DDRR"

Received (My Output): ""

Answer checking result: There exist a solution, but your output is "".

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

    Yes, we are fixing it.

    Sorry for the delay.

    Update: Fixed now.

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

      Return "Exists" if there is at least one cross on the given board. Otherwise, return "Does not exist". Note that the return value is case-sensitive.

      Exist — Exists. I couldn't find bug around 30 minutes. System expected "Exist".

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

      Please check my solution (Handle — AM51) . System tests are passing but someone challenged the solution before . Are you also reconsidering the challenges that might have been made with wrong cases ?

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

      How did it affect challenge phase in div2?

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

What's the correct way to solve Div 1 450?

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

    After applying K multiply operations and L add operations, S can be express in the form:

    S * BK + A(Bp1 + Bp2 + ... + BpL) where pi <  = K

    Iterate K from 0 to 64 (or a bit bigger), consider remain = (T - S * BK) / A, we'll try to express this as sum of power of B. This can be done with a simple greedy.

    And make sure to check the case B = 0 first. I failed because of this :(

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

      I actually checked the case B = 0 wrongly. I didn't realize you can jump back to 0 if B = 0 -_-

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

      Is there any extra constraint like

      p1 >= p2 >= .. >= PL=1

      if we consider p1 is largest among them.

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

approach for Div2 1000 ?

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

Can anyone help me understand one thing.
How does the following code may result in segmentation fault for the following input:
{{".#...", ".#.#.", ".#.#.", ".#.#.", "...#."}, 3000}

Div2 500

I cannot reproduce that problem locally and I get the correct output.

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

Can anyone please explain DIV 2 500 problem ?

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

    The way i solved it : Write a recursive function bool canSolve(int row,int col,int stepsLeft) which tells you if it is possible to reach cell (n-1,m-1) from cell (row,col) in exactly stepsLeft steps . Transitions are pretty straightforward , just recurse on all 4 adjacent cells .

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

      where to stop that recursion when steps left becomes zero ?

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

        Base Case : if(stepsLeft == 0) { return row == n-1 && col == m-1 ; }

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

          can we have this approach 1. find the shortest path such that ((K-pathlength)==even_number) 2. print that path 3. repeat last two consecutive characters (K-pathlength) times .

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

            How do you find such a shortest path ? K-pathlength can be odd too , if you can find such a path , it should work i think .

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

            Yes, I did exactly that.

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

              ccsnoopy i stucked in the first part , how to efficiently find such path can you please explain ?

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

                Since the graph is unweighted, you can simply do BFS from upper left corner and find the distance on the lower right corner.

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

Do Solutions submitted for practice problems on TopCoder checked on Full test cases in web arena ?