Diese Frage hat einen ähnlichen Aufbau wie " Ein Array suchen", das zu einer Reihe von Summen passt, obwohl sich seine Ziele stark unterscheiden.
Betrachten Sie ein Array A
von Länge n
. Das Array enthält nur positive Ganzzahlen. Zum Beispiel A = (1,1,2,2)
. Definieren wir f(A)
als die Menge der Summen aller nicht leeren zusammenhängenden Subarrays von A
. In diesem Fall f(A) = {1,2,3,4,5,6}
. Die zu produzierenden Schritte f(A)
sind wie folgt:
Die Subarrays von A
sind (1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)
. Ihre jeweiligen Beträge sind 1,1,2,2,2,3,4,4,5,6
. Das Set, das Sie aus dieser Liste erhalten, ist daher {1,2,3,4,5,6}
.
Wir nennen ein Array A
eindeutig, wenn es kein anderes Array B
mit der gleichen Länge gibt f(A) = f(B)
, außer dem A
umgekehrten Array . Zum Beispiel, f((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}
aber es gibt kein anderes Längenarray 3
, das den gleichen Satz von Summen erzeugt.
Wir werden nur Arrays betrachten, bei denen die Elemente entweder eine bestimmte Ganzzahl s
oder sind s+1
. ZB wenn s=1
die Arrays nur 1
und enthalten würden 2
.
Aufgabe
Die Aufgabe für eine gegebene n
und s
ist es, die Anzahl der eindeutigen Arrays dieser Länge zu zählen. Sie können davon ausgehen, dass s
zwischen 1
und 9
.
Sie sollten nicht die Umkehrung eines Arrays sowie das Array selbst zählen.
Beispiele
s = 1
ist die Antwort immer n+1
.
s = 2
Die Antworten zählen von n = 1
oben:
2,3,6,10,20,32,52,86
s = 8
Die Antworten zählen von n = 1
oben:
2,3,6,10,20,36,68,130
Ergebnis
Für einen bestimmten n
Fall sollte Ihr Code die Antwort für alle Werte von s
von 1
bis ausgeben 9
. Ihre Punktzahl ist der höchste Wert, n
für den dies in einer Minute abgeschlossen ist.
Testen
Ich muss Ihren Code auf meinem Ubuntu-Computer ausführen. Geben Sie daher so detaillierte Anweisungen wie möglich zum Kompilieren und Ausführen Ihres Codes an.
Bestenliste
- n = 24 von Anders Kaseorg in Rust (34 Sekunden)
- n = 16 von Ourous in Clean (36 Sekunden)
- n = 14 von JRowan in Common Lisp (49 Sekunden)