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 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.
Prenderemo in considerazione solo le matrici in cui gli elementi sono o un dato intero so s+1. Ad esempio, se s=1gli array contengono solo 1e 2.
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.
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 = 1sono:
2,3,6,10,20,32,52,86
s = 8, le risposte contando dall'alto n = 1sono:
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 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 = 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)