Essa pergunta tem uma configuração semelhante a Encontrar uma matriz que se encaixe em um conjunto de somas, embora seja bastante diferente em seus objetivos.
Considere uma matriz A
de comprimento n
. A matriz contém apenas números inteiros positivos. Por exemplo A = (1,1,2,2)
. Vamos definir f(A)
como o conjunto de somas de todos os subarrays contíguos não vazios de A
. Nesse caso f(A) = {1,2,3,4,5,6}
. As etapas a f(A)
serem produzidas são as seguintes:
Os sub-arranjos de A
são (1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)
. Suas respectivas somas são 1,1,2,2,2,3,4,4,5,6
. O conjunto que você obtém desta lista é, portanto {1,2,3,4,5,6}
.
Chamamos uma matriz de A
única se não houver outra matriz B
do mesmo comprimento, de modo que f(A) = f(B)
, exceto a matriz A
invertida. Como exemplo, f((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}
mas não há outra matriz de comprimento 3
que produz o mesmo conjunto de somas.
Consideraremos apenas matrizes em que os elementos são um número inteiro s
ou s+1
. Por exemplo, se s=1
as matrizes conteriam apenas 1
e 2
.
Tarefa
A tarefa, para um dado n
e, s
é contar o número de matrizes exclusivas desse comprimento. Você pode assumir que s
está entre 1
e 9
.
Você não deve contar o inverso de uma matriz, bem como a própria matriz.
Exemplos
s = 1
, a resposta é sempre n+1
.
s = 2
, as respostas contando de n = 1
cima são:
2,3,6,10,20,32,52,86
s = 8
, as respostas contando de n = 1
cima são:
2,3,6,10,20,36,68,130
Ponto
Para um dado n
, seu código deve gerar a resposta para todos os valores de s
from 1
a 9
. Sua pontuação é o valor mais alto n
para o qual isso termina em um minuto.
Teste
Vou precisar executar seu código na minha máquina ubuntu, portanto, inclua as instruções mais detalhadas possíveis sobre como compilar e executar seu código.
Entre os melhores
- n = 24 por Anders Kaseorg em Oxidação (34 segundos)
- n = 16 por Ourous em Clean (36 segundos)
- n = 14 por JRowan no Common Lisp (49 segundos)