@@ -4,17 +4,13 @@ package g3501_3600.s3539_find_sum_of_array_product_of_magical_sequences
4
4
// #2025_05_06_Time_60_ms_(100.00%)_Space_48.98_MB_(100.00%)
5
5
6
6
class Solution {
7
- private val mod = 1000000007
8
- private val c: Array <IntArray > = precomputeBinom(31 )
9
- private val p: IntArray = precomputePop(31 )
10
-
11
7
fun magicalSum (m : Int , k : Int , nums : IntArray ): Int {
12
8
val n = nums.size
13
9
val pow = Array <LongArray >(n) { LongArray (m + 1 ) }
14
10
for (j in 0 .. < n) {
15
11
pow[j][0 ] = 1L
16
12
for (c in 1 .. m) {
17
- pow[j][c] = pow[j][c - 1 ] * nums[j] % mod
13
+ pow[j][c] = pow[j][c - 1 ] * nums[j] % MOD
18
14
}
19
15
}
20
16
var dp = Array <Array <LongArray >>(m + 1 ) { Array <LongArray >(k + 1 ) { LongArray (m + 1 ) } }
@@ -42,12 +38,12 @@ class Solution {
42
38
(
43
39
next[t + cc][o + (total and 1 )][total ushr 1 ] +
44
40
dp[t][o][c] *
45
- this @Solution.c [m - t][cc] %
46
- mod
41
+ C [m - t][cc] %
42
+ MOD
47
43
* pow[i][cc] %
48
- mod
44
+ MOD
49
45
) %
50
- mod
46
+ MOD
51
47
)
52
48
}
53
49
}
@@ -60,31 +56,37 @@ class Solution {
60
56
var res: Long = 0
61
57
for (o in 0 .. k) {
62
58
for (c in 0 .. m) {
63
- if (o + p [c] == k) {
64
- res = (res + dp[m][o][c]) % mod
59
+ if (o + P [c] == k) {
60
+ res = (res + dp[m][o][c]) % MOD
65
61
}
66
62
}
67
63
}
68
64
return res.toInt()
69
65
}
70
66
71
- private fun precomputeBinom (max : Int ): Array <IntArray > {
72
- val res = Array <IntArray >(max) { IntArray (max) }
73
- for (i in 0 .. < max) {
74
- res[i][i] = 1
75
- res[i][0 ] = res[i][i]
76
- for (j in 1 .. < i) {
77
- res[i][j] = (res[i - 1 ][j - 1 ] + res[i - 1 ][j]) % mod
67
+ companion object {
68
+ private const val MOD = 1000000007
69
+ private val C : Array <IntArray > = precomputeBinom(31 )
70
+ private val P : IntArray = precomputePop(31 )
71
+
72
+ private fun precomputeBinom (max : Int ): Array <IntArray > {
73
+ val res = Array <IntArray >(max) { IntArray (max) }
74
+ for (i in 0 .. < max) {
75
+ res[i][i] = 1
76
+ res[i][0 ] = res[i][i]
77
+ for (j in 1 .. < i) {
78
+ res[i][j] = (res[i - 1 ][j - 1 ] + res[i - 1 ][j]) % MOD
79
+ }
78
80
}
81
+ return res
79
82
}
80
- return res
81
- }
82
83
83
- private fun precomputePop (max : Int ): IntArray {
84
- val res = IntArray (max)
85
- for (i in 1 .. < max) {
86
- res[i] = res[i shr 1 ] + (i and 1 )
84
+ private fun precomputePop (max : Int ): IntArray {
85
+ val res = IntArray (max)
86
+ for (i in 1 .. < max) {
87
+ res[i] = res[i shr 1 ] + (i and 1 )
88
+ }
89
+ return res
87
90
}
88
- return res
89
91
}
90
92
}
0 commit comments