Questa domanda ha una configurazione simile a Trova un array che si adatta a una serie di somme sebbene sia abbastanza diverso nei suoi obiettivi.
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.
Prenderemo in considerazione solo le matrici in cui gli elementi sono o un dato intero s
o s+1
. Ad esempio, se s=1
gli array contengono solo 1
e 2
.
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
.
Non si deve contare il retro di un array così come l'array stesso.
Esempi
s = 1
, la risposta è sempre n+1
.
s = 2
, le risposte contando dall'alto n = 1
sono:
2,3,6,10,20,32,52,86
s = 8
, le risposte contando dall'alto n = 1
sono:
2,3,6,10,20,36,68,130
Punto
Per un dato dato 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 = 24 di Anders Kaseorg in Rust (34 secondi)
- n = 16 di Ourous in Clean (36 secondi)
- n = 14 di JRowan in Common Lisp (49 secondi)