Imagine uma grade de quadrados W por H que envolve toroidalmente. Os itens são colocados na grade da seguinte maneira.
O primeiro item pode ser colocado em qualquer quadrado, mas os itens subsequentes não devem estar a uma distância de Manhattan R de nenhum item anterior (também conhecido como bairro de Von Neumann, no intervalo R ). A escolha cuidadosa das posições permite ajustar um grande número de itens na grade antes que não haja mais posições válidas. No entanto, considere o objetivo oposto: qual é o menor número de itens que podem ser colocados e não deixam mais posições válidas?
Aqui está uma zona de exclusão do raio 5:
Aqui está outra zona de exclusão do raio 5, desta vez próxima às bordas, para que o comportamento de quebra seja aparente:
Entrada
Três inteiros:
- W : largura da grade (número inteiro positivo)
- H : altura da grade (número inteiro positivo)
- R : raio da zona de exclusão (número inteiro não negativo)
Saída
Um número inteiro N , que é o menor número de itens que podem ser colocados, impedindo outros canais válidos.
Detalhes
- Um raio de zero fornece uma zona de exclusão de 1 quadrado (aquele em que o item foi colocado).
- Um raio de N exclui a zona que pode ser alcançada em N etapas ortogonais (lembre-se de que as arestas estão dispostas toroidalmente).
Seu código deve funcionar para o caso trivial de R = 0, mas não precisa funcionar para W = 0 ou H = 0.
Seu código também deve lidar com o caso em que R > W ou R > H .
Prazo e casos de teste
Seu código deve poder lidar com todos os casos de teste e cada caso de teste deve ser concluído em 5 minutos. Isso deve ser fácil (a solução JavaScript de exemplo leva alguns segundos para cada caso de teste). O prazo é principalmente para excluir a abordagem de força bruta extrema. A abordagem de exemplo ainda é uma força bastante bruta.
Se o seu código for concluído dentro de 5 minutos em uma máquina, mas não em outra, ela estará próxima o suficiente.
Casos de teste nas entradas do formulário: output asW H R : N
5 4 4 : 1
5 4 3 : 2
5 4 2 : 2
5 4 1 : 5
7 5 5 : 1
7 5 4 : 2
7 5 3 : 2
7 5 2 : 4
8 8 8 : 1
8 8 7 : 2
8 8 6 : 2
8 8 5 : 2
8 8 4 : 2
8 8 3 : 4
7 6 4 : 2
7 6 2 : 4
11 7 4 : 3
11 9 4 : 4
13 13 6 : 3
11 11 5 : 3
15 14 7 : 2
16 16 8 : 2
Snippet para ajudar a visualizar e brincar com idéias
Solução de exemplo (não destruída)
Apenas um exemplo para pequenas saídas (resultantes de um raio não muito menor que a largura e a altura). É capaz de lidar com qualquer um dos casos de teste, mas o tempo limite é interrompido e a maioria dos casos maiores.