Traverse a
und zählen a[i] mod k
; es sollte k
solche Zählungen geben.
Recurse und Memoize über die verschiedenen Partitionen von k, 2*k, 3*k...etc.
mit Teilen kleiner oder gleich k
, die Produkte der entsprechenden Zählungen hinzufügen.
Wenn beispielsweise k
10
wären, wären einige der Partitionen 1+2+7
und 1+2+3+4
; aber während des Memoisierens müssten wir nur einmal berechnen, wie viele Paare mod k
im Array (1 + 2)
produzieren.
Zum Beispiel k = 5, a = {1,4,2,3,5,6}
:
counts of a[i] mod k: {1,2,1,1,1}
products of distinct partitions of k:
5 => 1
4,1 => 2
3,2 => 1
products of distinct partitions of 2 * k with parts <= k:
5,4,1 => 2
5,3,2 => 1
4,1,3,2 => 2
products of distinct partitions of 3 * k with parts <= k:
5,4,1,3,2 => 2
answer = 11
{1,4} {4,6} {2,3} {5}
{1,4,2,3} {1,4,5} {4,6,2,3} {4,6,5} {2,3,5}
{1,4,2,3,5} {4,6,2,3,5}
nicht aufeinander folgende? Unterfolgen? – vish4071
Da Sie konstante obere Grenzen angegeben haben, ist jede Lösung für Ihr Problem trivialerweise O (1). –
haha :) das ist gut !! @ JohnColeman – vish4071