Algoritmo - Polícia e ladrão na grade (N * N)

Declaração do problema:
Dada a matriz N * N e cada célula da matriz contém polícia ou ladrão. Descubra o número de ladrões presos pela polícia.

Uma polícia pode prender apenas um ladrão.A polícia pode prender ladrão na mesma fila.A polícia pode prender ladrão dentro da faixa de K. (Ex: se K for 1, a polícia na célula 3 pode prender ladrões apenas na célula 2 e 4)

Entrada:
3 1 -> aqui 3 é N e 1 é K
T P T
T T P
P P T

Resultado:
3

Minha solução expirou para algumas entradas:

1. Iterate each row and have two Treeset<Integer> to store position of police and thief
2. If current item is Police, then check if thief Treeset is Not empty, 
   a.if so then iterate the treeset to find the position from thief set which 
   can be removed(satisfying above criteria), remove thief from treeset and 
   increment counter.
     a.1. If such item not available then add current position to police set
   b. if not then add position to police treeset

3. If current item is Thief, then do the same

Após a iteração concluir por uma linha, itere para a próxima linha e, finalmente, no contador de impressão.

Tomando a complexidade do tempo para uma linha:
1. Iterando todos os elementos em uma linha O (n)
2. Adicionando ou removendo elemento do conjunto de árvores O (log (n))
Definitivamente leva mais do que O (n * log (n))

Por favor, deixe-me saber que tipo de problema é esse e como devo resolver de forma eficaz.

questionAnswers(2)

yourAnswerToTheQuestion