Questo è il seguito degli array Count che creano set unici . La differenza significativa è la definizione di unicità.
Considera una matrice Adi 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 Asono (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 Bdella stessa lunghezza tale che f(A) = f(B), ad eccezione dell'array Ainvertito. Ad esempio, f((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}ma non esiste un altro array di lunghezza 3che produce lo stesso insieme di somme.
Compito
Il compito, per un dato ned sè quello di contare il numero di matrici uniche di quella lunghezza. Puoi presumere che ssia tra 1e 9. Devi solo contare le matrici in cui gli elementi sono un dato intero so s+1. Ad esempio se s=1gli array che stai contando contengono solo 1e 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 sda 1a 9. Il tuo punteggio è il valore più alto nper 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?