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

Автор I_LOVE_ROMANIA, история, 6 лет назад, По-английски

Hi! I encounter difficulties in finding a solution to this problem: having a matrix filled with 0 and 1, size N x N with N <= 1000, output the number of squares with the border filled with 1 (we are not interested in what's inside the square). We consider valid even the squares of size 1x1. For this example, the answer is 27. Can anybody help me? (sorry for the example, I don't know how to show the lines one above the others) 0000000 0111100 0101111 0100101 0111111 0000011 0000011

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

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

I think a 2D BIT should be enough to solve this task.

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

The best I have is O(n3) solution with constant. I think it can pass if the time limit is two seconds (maybe even one second with powerful judge).

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

Solve each diagonal separately. You need to use 2D-segment tree or 2D-BIT for O(n*n*log(n)*log(n)) complexity or persistent segment tree for O(n*n*log(n)) complexity.