Questo è il seguito degli array Count che creano set unici . La differenza significativa è la definizione di unicità.
Considera una matrice A
di lunghezza n
. La matrice contiene solo numeri interi positivi. Per esempio A = (1,1,2,2)
. Definiamo f(A)
come l'insieme delle somme di tutti i sottocampi contigui non vuoti di A
. In questo caso f(A) = {1,2,3,4,5,6}
. I passaggi per produrre f(A)
sono i seguenti:
I subarrays di A
sono (1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)
. Le loro rispettive somme sono 1,1,2,2,2,3,4,4,5,6
. Il set che ottieni da questo elenco è quindi {1,2,3,4,5,6}
.
Chiamiamo un array A
univoco se non esiste un altro array B
della stessa lunghezza tale che f(A) = f(B)
, ad eccezione dell'array A
invertito. Ad esempio, f((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}
ma non esiste un altro array di lunghezza 3
che produce lo stesso insieme di somme.
Compito
Il compito, per un dato n
ed s
è quello di contare il numero di matrici uniche di quella lunghezza. Puoi presumere che s
sia tra 1
e 9
. Devi solo contare le matrici in cui gli elementi sono un dato intero s
o s+1
. Ad esempio se s=1
gli array che stai contando contengono solo 1
e 2
. Tuttavia, la definizione di unicità è rispetto a qualsiasi altra matrice della stessa lunghezza. Un esempio concreto non[1, 2, 2, 2]
è unico in quanto fornisce lo stesso insieme di somme di .[1, 1, 2, 3]
Dovresti contare il retro di un array e l'array stesso (purché l'array non sia un palindromo ovviamente).
Esempi
s = 1
, le risposte per n = 2,3,4,5,6,7,8,9 sono:
4, 3, 3, 4, 4, 5, 5, 6
Per s = 1
, le matrici uniche di lunghezza 4 sono
(1, 1, 1, 1)
(2, 1, 1, 2)
(2, 2, 2, 2)
s = 2
, le risposte per n = 2,3,4,5,6,7,8,9 sono:
4, 8, 16, 32, 46, 69, 121, 177
Un esempio di un array con cui non è univoco s = 2
è:
(3, 2, 2, 3, 3, 3).
Questo ha lo stesso insieme di somme di entrambi: (3, 2, 2, 2, 4, 3)
e (3, 2, 2, 4, 2, 3)
.
s = 8
, le risposte per n = 2,3,4,5,6,7,8,9 sono:
4, 8, 16, 32, 64, 120, 244, 472
Punto
Per un dato motivo n
, il tuo codice dovrebbe generare la risposta per tutti i valori di s
da 1
a 9
. Il tuo punteggio è il valore più alto n
per il quale questo viene completato in un minuto.
analisi
Dovrò eseguire il tuo codice sulla mia macchina Ubuntu, quindi per favore includi le istruzioni più dettagliate possibili su come compilare ed eseguire il tuo codice.
Classifica
- n = 13 di Christian Sievers in Haskell (42 secondi)
s
? Che cosa rappresenta?