Este é um acompanhamento de matrizes de contagem que fazem conjuntos exclusivos . A diferença significativa é a definição de exclusividade.
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 sub-arranjos 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 dessa 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.
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ê só precisa contar matrizes onde os elementos são um número inteiro s
ou s+1
. Por exemplo, se s=1
as matrizes que você está contando contêm apenas 1
e 2
. No entanto, a definição de exclusividade refere-se a qualquer outra matriz do mesmo comprimento. Como exemplo concreto, não[1, 2, 2, 2]
é único, pois fornece o mesmo conjunto de somas que .[1, 1, 2, 3]
Você deve contar o reverso de uma matriz, bem como a própria matriz (desde que a matriz não seja um palíndromo, é claro).
Exemplos
s = 1
, as respostas para n = 2,3,4,5,6,7,8,9 são:
4, 3, 3, 4, 4, 5, 5, 6
Pois s = 1
, as matrizes únicas de comprimento 4 são
(1, 1, 1, 1)
(2, 1, 1, 2)
(2, 2, 2, 2)
s = 2
, as respostas para n = 2,3,4,5,6,7,8,9 são:
4, 8, 16, 32, 46, 69, 121, 177
Um exemplo de uma matriz que não é exclusiva s = 2
é:
(3, 2, 2, 3, 3, 3).
Isso tem o mesmo conjunto de somas que ambos: (3, 2, 2, 2, 4, 3)
e (3, 2, 2, 4, 2, 3)
.
s = 8
, as respostas para n = 2,3,4,5,6,7,8,9 são:
4, 8, 16, 32, 64, 120, 244, 472
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 o 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 = 13 por Christian Sievers em Haskell (42 segundos)
s
? O que isso representa?