I_LOVE_ROMANIA's blog

By I_LOVE_ROMANIA, history, 6 years ago, In English

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

  • Vote: I like it
  • +4
  • Vote: I do not like it

| Write comment?
»
6 years ago, # |
  Vote: I like it 0 Vote: I do not like it

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

»
6 years ago, # |
  Vote: I like it 0 Vote: I do not like it

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 years ago, # |
  Vote: I like it +8 Vote: I do not like it

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.