diff --git a/src/main/kotlin/g3201_3300/s3254_find_the_power_of_k_size_subarrays_i/Solution.kt b/src/main/kotlin/g3201_3300/s3254_find_the_power_of_k_size_subarrays_i/Solution.kt
new file mode 100644
index 000000000..eaa3f9b8c
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3254_find_the_power_of_k_size_subarrays_i/Solution.kt
@@ -0,0 +1,27 @@
+package g3201_3300.s3254_find_the_power_of_k_size_subarrays_i
+
+// #Medium #Array #Sliding_Window #2024_08_21_Time_245_ms_(92.59%)_Space_42.2_MB_(16.67%)
+
+class Solution {
+ fun resultsArray(nums: IntArray, k: Int): IntArray {
+ val n = nums.size
+ val arr = IntArray(n - k + 1)
+ var count = 0
+ for (i in 1 until k) {
+ if (nums[i] == nums[i - 1] + 1) {
+ count++
+ }
+ }
+ arr[0] = if ((count == k - 1)) nums[k - 1] else -1
+ for (i in 1..n - k) {
+ if (nums[i] == nums[i - 1] + 1) {
+ count--
+ }
+ if (nums[i + k - 1] == nums[i + k - 2] + 1) {
+ count++
+ }
+ arr[i] = if ((count == k - 1)) nums[i + k - 1] else -1
+ }
+ return arr
+ }
+}
diff --git a/src/main/kotlin/g3201_3300/s3254_find_the_power_of_k_size_subarrays_i/readme.md b/src/main/kotlin/g3201_3300/s3254_find_the_power_of_k_size_subarrays_i/readme.md
new file mode 100644
index 000000000..48b663c77
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3254_find_the_power_of_k_size_subarrays_i/readme.md
@@ -0,0 +1,48 @@
+3254\. Find the Power of K-Size Subarrays I
+
+Medium
+
+You are given an array of integers `nums` of length `n` and a _positive_ integer `k`.
+
+The **power** of an array is defined as:
+
+* Its **maximum** element if _all_ of its elements are **consecutive** and **sorted** in **ascending** order.
+* \-1 otherwise.
+
+You need to find the **power** of all subarrays of `nums` of size `k`.
+
+Return an integer array `results` of size `n - k + 1`, where `results[i]` is the _power_ of `nums[i..(i + k - 1)]`.
+
+**Example 1:**
+
+**Input:** nums = [1,2,3,4,3,2,5], k = 3
+
+**Output:** [3,4,-1,-1,-1]
+
+**Explanation:**
+
+There are 5 subarrays of `nums` of size 3:
+
+* `[1, 2, 3]` with the maximum element 3.
+* `[2, 3, 4]` with the maximum element 4.
+* `[3, 4, 3]` whose elements are **not** consecutive.
+* `[4, 3, 2]` whose elements are **not** sorted.
+* `[3, 2, 5]` whose elements are **not** consecutive.
+
+**Example 2:**
+
+**Input:** nums = [2,2,2,2,2], k = 4
+
+**Output:** [-1,-1]
+
+**Example 3:**
+
+**Input:** nums = [3,2,3,2,3,2], k = 2
+
+**Output:** [-1,3,-1,3,-1]
+
+**Constraints:**
+
+* `1 <= n == nums.length <= 500`
+* 1 <= nums[i] <= 105
+* `1 <= k <= n`
\ No newline at end of file
diff --git a/src/main/kotlin/g3201_3300/s3255_find_the_power_of_k_size_subarrays_ii/Solution.kt b/src/main/kotlin/g3201_3300/s3255_find_the_power_of_k_size_subarrays_ii/Solution.kt
new file mode 100644
index 000000000..23828d7dc
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3255_find_the_power_of_k_size_subarrays_ii/Solution.kt
@@ -0,0 +1,28 @@
+package g3201_3300.s3255_find_the_power_of_k_size_subarrays_ii
+
+// #Medium #Array #Sliding_Window #2024_08_21_Time_892_ms_(89.36%)_Space_69.8_MB_(76.60%)
+
+class Solution {
+ fun resultsArray(nums: IntArray, k: Int): IntArray {
+ if (k == 1) {
+ return nums
+ }
+ var start = 0
+ val n = nums.size
+ val output = IntArray(n - k + 1)
+ for (i in 1 until n) {
+ if (nums[i] != nums[i - 1] + 1) {
+ start = i
+ }
+ val index = i - k + 1
+ if (index >= 0) {
+ if (start > index) {
+ output[index] = -1
+ } else {
+ output[index] = nums[i]
+ }
+ }
+ }
+ return output
+ }
+}
diff --git a/src/main/kotlin/g3201_3300/s3255_find_the_power_of_k_size_subarrays_ii/readme.md b/src/main/kotlin/g3201_3300/s3255_find_the_power_of_k_size_subarrays_ii/readme.md
new file mode 100644
index 000000000..3a2c24329
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3255_find_the_power_of_k_size_subarrays_ii/readme.md
@@ -0,0 +1,48 @@
+3255\. Find the Power of K-Size Subarrays II
+
+Medium
+
+You are given an array of integers `nums` of length `n` and a _positive_ integer `k`.
+
+The **power** of an array is defined as:
+
+* Its **maximum** element if _all_ of its elements are **consecutive** and **sorted** in **ascending** order.
+* \-1 otherwise.
+
+You need to find the **power** of all subarrays of `nums` of size `k`.
+
+Return an integer array `results` of size `n - k + 1`, where `results[i]` is the _power_ of `nums[i..(i + k - 1)]`.
+
+**Example 1:**
+
+**Input:** nums = [1,2,3,4,3,2,5], k = 3
+
+**Output:** [3,4,-1,-1,-1]
+
+**Explanation:**
+
+There are 5 subarrays of `nums` of size 3:
+
+* `[1, 2, 3]` with the maximum element 3.
+* `[2, 3, 4]` with the maximum element 4.
+* `[3, 4, 3]` whose elements are **not** consecutive.
+* `[4, 3, 2]` whose elements are **not** sorted.
+* `[3, 2, 5]` whose elements are **not** consecutive.
+
+**Example 2:**
+
+**Input:** nums = [2,2,2,2,2], k = 4
+
+**Output:** [-1,-1]
+
+**Example 3:**
+
+**Input:** nums = [3,2,3,2,3,2], k = 2
+
+**Output:** [-1,3,-1,3,-1]
+
+**Constraints:**
+
+* 1 <= n == nums.length <= 105
+* 1 <= nums[i] <= 106
+* `1 <= k <= n`
\ No newline at end of file
diff --git a/src/main/kotlin/g3201_3300/s3256_maximum_value_sum_by_placing_three_rooks_i/Solution.kt b/src/main/kotlin/g3201_3300/s3256_maximum_value_sum_by_placing_three_rooks_i/Solution.kt
new file mode 100644
index 000000000..8ef53219e
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3256_maximum_value_sum_by_placing_three_rooks_i/Solution.kt
@@ -0,0 +1,63 @@
+package g3201_3300.s3256_maximum_value_sum_by_placing_three_rooks_i
+
+// #Hard #Array #Dynamic_Programming #Matrix #Enumeration
+// #2024_08_21_Time_279_ms_(100.00%)_Space_41.6_MB_(93.33%)
+
+import kotlin.math.max
+
+class Solution {
+ fun maximumValueSum(board: Array): Long {
+ val n = board.size
+ val m = board[0].size
+ val tb = Array(n) { IntArray(m) }
+ tb[0] = board[0].copyOf(m)
+ for (i in 1 until n) {
+ for (j in 0 until m) {
+ tb[i][j] = max(tb[i - 1][j], board[i][j])
+ }
+ }
+ val bt = Array(n) { IntArray(m) }
+ bt[n - 1] = board[n - 1].copyOf(m)
+ for (i in n - 2 downTo 0) {
+ for (j in 0 until m) {
+ bt[i][j] = max(bt[i + 1][j], board[i][j])
+ }
+ }
+ var ans = Long.MIN_VALUE
+ for (i in 1 until n - 1) {
+ val max3Top = getMax3(tb[i - 1])
+ val max3Cur = getMax3(board[i])
+ val max3Bottom = getMax3(bt[i + 1])
+ for (topCand in max3Top) {
+ for (curCand in max3Cur) {
+ for (bottomCand in max3Bottom) {
+ if (topCand[1] != curCand[1] && topCand[1] != bottomCand[1] && curCand[1] != bottomCand[1]) {
+ val cand = topCand[0].toLong() + curCand[0] + bottomCand[0]
+ ans = max(ans, cand)
+ }
+ }
+ }
+ }
+ }
+ return ans
+ }
+
+ private fun getMax3(row: IntArray): Array {
+ val m = row.size
+ val ans = Array(3) { IntArray(2) }
+ ans.fill(intArrayOf(Int.MIN_VALUE, -1))
+ for (j in 0 until m) {
+ if (row[j] >= ans[0][0]) {
+ ans[2] = ans[1]
+ ans[1] = ans[0]
+ ans[0] = intArrayOf(row[j], j)
+ } else if (row[j] >= ans[1][0]) {
+ ans[2] = ans[1]
+ ans[1] = intArrayOf(row[j], j)
+ } else if (row[j] > ans[2][0]) {
+ ans[2] = intArrayOf(row[j], j)
+ }
+ }
+ return ans
+ }
+}
diff --git a/src/main/kotlin/g3201_3300/s3256_maximum_value_sum_by_placing_three_rooks_i/readme.md b/src/main/kotlin/g3201_3300/s3256_maximum_value_sum_by_placing_three_rooks_i/readme.md
new file mode 100644
index 000000000..384583c5e
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3256_maximum_value_sum_by_placing_three_rooks_i/readme.md
@@ -0,0 +1,47 @@
+3256\. Maximum Value Sum by Placing Three Rooks I
+
+Hard
+
+You are given a `m x n` 2D array `board` representing a chessboard, where `board[i][j]` represents the **value** of the cell `(i, j)`.
+
+Rooks in the **same** row or column **attack** each other. You need to place _three_ rooks on the chessboard such that the rooks **do not** **attack** each other.
+
+Return the **maximum** sum of the cell **values** on which the rooks are placed.
+
+**Example 1:**
+
+**Input:** board = [[-3,1,1,1],[-3,1,-3,1],[-3,2,1,1]]
+
+**Output:** 4
+
+**Explanation:**
+
+
+
+We can place the rooks in the cells `(0, 2)`, `(1, 3)`, and `(2, 1)` for a sum of `1 + 1 + 2 = 4`.
+
+**Example 2:**
+
+**Input:** board = [[1,2,3],[4,5,6],[7,8,9]]
+
+**Output:** 15
+
+**Explanation:**
+
+We can place the rooks in the cells `(0, 0)`, `(1, 1)`, and `(2, 2)` for a sum of `1 + 5 + 9 = 15`.
+
+**Example 3:**
+
+**Input:** board = [[1,1,1],[1,1,1],[1,1,1]]
+
+**Output:** 3
+
+**Explanation:**
+
+We can place the rooks in the cells `(0, 2)`, `(1, 1)`, and `(2, 0)` for a sum of `1 + 1 + 1 = 3`.
+
+**Constraints:**
+
+* `3 <= m == board.length <= 100`
+* `3 <= n == board[i].length <= 100`
+* -109 <= board[i][j] <= 109
\ No newline at end of file
diff --git a/src/main/kotlin/g3201_3300/s3257_maximum_value_sum_by_placing_three_rooks_ii/Solution.kt b/src/main/kotlin/g3201_3300/s3257_maximum_value_sum_by_placing_three_rooks_ii/Solution.kt
new file mode 100644
index 000000000..7cd29d272
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3257_maximum_value_sum_by_placing_three_rooks_ii/Solution.kt
@@ -0,0 +1,63 @@
+package g3201_3300.s3257_maximum_value_sum_by_placing_three_rooks_ii
+
+// #Hard #Array #Dynamic_Programming #Matrix #Enumeration
+// #2024_08_21_Time_770_ms_(100.00%)_Space_87.5_MB_(33.33%)
+
+import kotlin.math.max
+
+class Solution {
+ fun maximumValueSum(board: Array): Long {
+ val n = board.size
+ val m = board[0].size
+ val tb = Array(n) { IntArray(m) }
+ tb[0] = board[0].copyOf(m)
+ for (i in 1 until n) {
+ for (j in 0 until m) {
+ tb[i][j] = max(tb[i - 1][j], board[i][j])
+ }
+ }
+ val bt = Array(n) { IntArray(m) }
+ bt[n - 1] = board[n - 1].copyOf(m)
+ for (i in n - 2 downTo 0) {
+ for (j in 0 until m) {
+ bt[i][j] = max(bt[i + 1][j], board[i][j])
+ }
+ }
+ var ans = Long.MIN_VALUE
+ for (i in 1 until n - 1) {
+ val max3Top = getMax3(tb[i - 1])
+ val max3Cur = getMax3(board[i])
+ val max3Bottom = getMax3(bt[i + 1])
+ for (topCand in max3Top) {
+ for (curCand in max3Cur) {
+ for (bottomCand in max3Bottom) {
+ if (topCand[1] != curCand[1] && topCand[1] != bottomCand[1] && curCand[1] != bottomCand[1]) {
+ val cand = topCand[0].toLong() + curCand[0] + bottomCand[0]
+ ans = max(ans, cand)
+ }
+ }
+ }
+ }
+ }
+ return ans
+ }
+
+ private fun getMax3(row: IntArray): Array {
+ val m = row.size
+ val ans = Array(3) { IntArray(2) }
+ ans.fill(intArrayOf(Int.MIN_VALUE, -1))
+ for (j in 0 until m) {
+ if (row[j] >= ans[0][0]) {
+ ans[2] = ans[1]
+ ans[1] = ans[0]
+ ans[0] = intArrayOf(row[j], j)
+ } else if (row[j] >= ans[1][0]) {
+ ans[2] = ans[1]
+ ans[1] = intArrayOf(row[j], j)
+ } else if (row[j] > ans[2][0]) {
+ ans[2] = intArrayOf(row[j], j)
+ }
+ }
+ return ans
+ }
+}
diff --git a/src/main/kotlin/g3201_3300/s3257_maximum_value_sum_by_placing_three_rooks_ii/readme.md b/src/main/kotlin/g3201_3300/s3257_maximum_value_sum_by_placing_three_rooks_ii/readme.md
new file mode 100644
index 000000000..6cd67b4ed
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3257_maximum_value_sum_by_placing_three_rooks_ii/readme.md
@@ -0,0 +1,47 @@
+3257\. Maximum Value Sum by Placing Three Rooks II
+
+Hard
+
+You are given a `m x n` 2D array `board` representing a chessboard, where `board[i][j]` represents the **value** of the cell `(i, j)`.
+
+Rooks in the **same** row or column **attack** each other. You need to place _three_ rooks on the chessboard such that the rooks **do not** **attack** each other.
+
+Return the **maximum** sum of the cell **values** on which the rooks are placed.
+
+**Example 1:**
+
+**Input:** board = [[-3,1,1,1],[-3,1,-3,1],[-3,2,1,1]]
+
+**Output:** 4
+
+**Explanation:**
+
+
+
+We can place the rooks in the cells `(0, 2)`, `(1, 3)`, and `(2, 1)` for a sum of `1 + 1 + 2 = 4`.
+
+**Example 2:**
+
+**Input:** board = [[1,2,3],[4,5,6],[7,8,9]]
+
+**Output:** 15
+
+**Explanation:**
+
+We can place the rooks in the cells `(0, 0)`, `(1, 1)`, and `(2, 2)` for a sum of `1 + 5 + 9 = 15`.
+
+**Example 3:**
+
+**Input:** board = [[1,1,1],[1,1,1],[1,1,1]]
+
+**Output:** 3
+
+**Explanation:**
+
+We can place the rooks in the cells `(0, 2)`, `(1, 1)`, and `(2, 0)` for a sum of `1 + 1 + 1 = 3`.
+
+**Constraints:**
+
+* `3 <= m == board.length <= 500`
+* `3 <= n == board[i].length <= 500`
+* -109 <= board[i][j] <= 109
\ No newline at end of file
diff --git a/src/main/kotlin/g3201_3300/s3258_count_substrings_that_satisfy_k_constraint_i/Solution.kt b/src/main/kotlin/g3201_3300/s3258_count_substrings_that_satisfy_k_constraint_i/Solution.kt
new file mode 100644
index 000000000..44fb4f9ad
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3258_count_substrings_that_satisfy_k_constraint_i/Solution.kt
@@ -0,0 +1,34 @@
+package g3201_3300.s3258_count_substrings_that_satisfy_k_constraint_i
+
+// #Easy #String #Sliding_Window #2024_08_21_Time_155_ms_(92.86%)_Space_34.7_MB_(85.71%)
+
+class Solution {
+ fun countKConstraintSubstrings(s: String, k: Int): Int {
+ val n = s.length
+ var sum = n
+ var i = 0
+ var j = 0
+ var one = 0
+ var zero = 0
+ var ch: Char
+ while (j < n) {
+ ch = s[j++]
+ if (ch == '0') {
+ zero++
+ } else {
+ one++
+ }
+ while (i <= j && one > k && zero > k) {
+ ch = s[i++]
+ if (ch == '0') {
+ zero--
+ } else {
+ one--
+ }
+ }
+ val len = (zero + one - 1)
+ sum += len
+ }
+ return sum
+ }
+}
diff --git a/src/main/kotlin/g3201_3300/s3258_count_substrings_that_satisfy_k_constraint_i/readme.md b/src/main/kotlin/g3201_3300/s3258_count_substrings_that_satisfy_k_constraint_i/readme.md
new file mode 100644
index 000000000..3eaf094de
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3258_count_substrings_that_satisfy_k_constraint_i/readme.md
@@ -0,0 +1,48 @@
+3258\. Count Substrings That Satisfy K-Constraint I
+
+Easy
+
+You are given a **binary** string `s` and an integer `k`.
+
+A **binary string** satisfies the **k-constraint** if **either** of the following conditions holds:
+
+* The number of `0`'s in the string is at most `k`.
+* The number of `1`'s in the string is at most `k`.
+
+Return an integer denoting the number of substrings of `s` that satisfy the **k-constraint**.
+
+**Example 1:**
+
+**Input:** s = "10101", k = 1
+
+**Output:** 12
+
+**Explanation:**
+
+Every substring of `s` except the substrings `"1010"`, `"10101"`, and `"0101"` satisfies the k-constraint.
+
+**Example 2:**
+
+**Input:** s = "1010101", k = 2
+
+**Output:** 25
+
+**Explanation:**
+
+Every substring of `s` except the substrings with a length greater than 5 satisfies the k-constraint.
+
+**Example 3:**
+
+**Input:** s = "11111", k = 1
+
+**Output:** 15
+
+**Explanation:**
+
+All substrings of `s` satisfy the k-constraint.
+
+**Constraints:**
+
+* `1 <= s.length <= 50`
+* `1 <= k <= s.length`
+* `s[i]` is either `'0'` or `'1'`.
\ No newline at end of file
diff --git a/src/main/kotlin/g3201_3300/s3259_maximum_energy_boost_from_two_drinks/Solution.kt b/src/main/kotlin/g3201_3300/s3259_maximum_energy_boost_from_two_drinks/Solution.kt
new file mode 100644
index 000000000..4add01867
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3259_maximum_energy_boost_from_two_drinks/Solution.kt
@@ -0,0 +1,22 @@
+package g3201_3300.s3259_maximum_energy_boost_from_two_drinks
+
+// #Medium #Array #Dynamic_Programming #2024_08_21_Time_811_ms_(96.88%)_Space_64.1_MB_(90.63%)
+
+import kotlin.math.max
+
+class Solution {
+ fun maxEnergyBoost(energyDrinkA: IntArray, energyDrinkB: IntArray): Long {
+ var a0: Long = 0
+ var a1: Long = 0
+ var b0: Long = 0
+ var b1: Long = 0
+ val n = energyDrinkA.size
+ for (i in 0 until n) {
+ a1 = max((a0 + energyDrinkA[i]), b0)
+ b1 = max((b0 + energyDrinkB[i]), a0)
+ a0 = a1
+ b0 = b1
+ }
+ return max(a1, b1)
+ }
+}
diff --git a/src/main/kotlin/g3201_3300/s3259_maximum_energy_boost_from_two_drinks/readme.md b/src/main/kotlin/g3201_3300/s3259_maximum_energy_boost_from_two_drinks/readme.md
new file mode 100644
index 000000000..f8e105266
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3259_maximum_energy_boost_from_two_drinks/readme.md
@@ -0,0 +1,41 @@
+3259\. Maximum Energy Boost From Two Drinks
+
+Medium
+
+You are given two integer arrays `energyDrinkA` and `energyDrinkB` of the same length `n` by a futuristic sports scientist. These arrays represent the energy boosts per hour provided by two different energy drinks, A and B, respectively.
+
+You want to _maximize_ your total energy boost by drinking one energy drink _per hour_. However, if you want to switch from consuming one energy drink to the other, you need to wait for _one hour_ to cleanse your system (meaning you won't get any energy boost in that hour).
+
+Return the **maximum** total energy boost you can gain in the next `n` hours.
+
+**Note** that you can start consuming _either_ of the two energy drinks.
+
+**Example 1:**
+
+**Input:** energyDrinkA = [1,3,1], energyDrinkB = [3,1,1]
+
+**Output:** 5
+
+**Explanation:**
+
+To gain an energy boost of 5, drink only the energy drink A (or only B).
+
+**Example 2:**
+
+**Input:** energyDrinkA = [4,1,1], energyDrinkB = [1,1,3]
+
+**Output:** 7
+
+**Explanation:**
+
+To gain an energy boost of 7:
+
+* Drink the energy drink A for the first hour.
+* Switch to the energy drink B and we lose the energy boost of the second hour.
+* Gain the energy boost of the drink B in the third hour.
+
+**Constraints:**
+
+* `n == energyDrinkA.length == energyDrinkB.length`
+* 3 <= n <= 105
+* 1 <= energyDrinkA[i], energyDrinkB[i] <= 105
\ No newline at end of file
diff --git a/src/main/kotlin/g3201_3300/s3260_find_the_largest_palindrome_divisible_by_k/Solution.kt b/src/main/kotlin/g3201_3300/s3260_find_the_largest_palindrome_divisible_by_k/Solution.kt
new file mode 100644
index 000000000..b3e7498d1
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3260_find_the_largest_palindrome_divisible_by_k/Solution.kt
@@ -0,0 +1,109 @@
+package g3201_3300.s3260_find_the_largest_palindrome_divisible_by_k
+
+// #Hard #String #Dynamic_Programming #Math #Greedy #Number_Theory
+// #2024_08_21_Time_211_ms_(100.00%)_Space_38.8_MB_(66.67%)
+
+class Solution {
+ fun largestPalindrome(n: Int, k: Int): String {
+ val sc = CharArray(n)
+ if (k == 1 || k == 3 || k == 9) {
+ sc.fill('9')
+ } else if (k == 7) {
+ if (n == 1) {
+ return "7"
+ } else if (n == 2) {
+ return "77"
+ }
+ val mod = n % 12
+ checkValues(n, mod, sc)
+ } else if (k == 2) {
+ sc.fill('9')
+ sc[0] = '8'
+ sc[n - 1] = '8'
+ } else if (k == 4) {
+ sc.fill('8')
+ var i = 2
+ var j = n - 3
+ while (i <= j) {
+ sc[i] = '9'
+ sc[j] = '9'
+ ++i
+ --j
+ }
+ } else if (k == 5) {
+ sc.fill('9')
+ sc[0] = '5'
+ sc[n - 1] = '5'
+ } else if (k == 6) {
+ val number = getString(n, sc)
+ if (number != null) {
+ return number
+ }
+ } else if (k == 8) {
+ sc.fill('8')
+ var i = 3
+ var j = n - 4
+ while (i <= j) {
+ sc[i] = '9'
+ sc[j] = '9'
+ ++i
+ --j
+ }
+ }
+ return String(sc)
+ }
+
+ private fun checkValues(n: Int, mod: Int, sc: CharArray) {
+ if (mod == 6 || mod == 0) {
+ sc.fill('9')
+ } else if (mod == 3) {
+ sc.fill('9')
+ sc[n / 2] = '5'
+ } else if (mod == 4 || mod == 5 || mod == 1 || mod == 2) {
+ sc.fill('7')
+ var i = 0
+ var j = n - 1
+ while (i + 1 < j) {
+ sc[i] = '9'
+ sc[j] = '9'
+ ++i
+ --j
+ }
+ } else if (mod == 7 || mod == 8 || mod == 10 || mod == 11) {
+ sc.fill('4')
+ var i = 0
+ var j = n - 1
+ while (i + 1 < j) {
+ sc[i] = '9'
+ sc[j] = '9'
+ ++i
+ --j
+ }
+ } else if (mod == 9) {
+ sc.fill('9')
+ sc[n / 2] = '6'
+ }
+ }
+
+ private fun getString(n: Int, sc: CharArray): String? {
+ if (n == 1) {
+ return "6"
+ } else if (n == 2) {
+ return "66"
+ } else {
+ if (n % 2 == 1) {
+ sc.fill('9')
+ sc[0] = '8'
+ sc[n - 1] = '8'
+ sc[n / 2] = '8'
+ } else {
+ sc.fill('9')
+ sc[0] = '8'
+ sc[n - 1] = '8'
+ sc[n / 2] = '7'
+ sc[n / 2 - 1] = '7'
+ }
+ }
+ return null
+ }
+}
diff --git a/src/main/kotlin/g3201_3300/s3260_find_the_largest_palindrome_divisible_by_k/readme.md b/src/main/kotlin/g3201_3300/s3260_find_the_largest_palindrome_divisible_by_k/readme.md
new file mode 100644
index 000000000..a4cfb138e
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3260_find_the_largest_palindrome_divisible_by_k/readme.md
@@ -0,0 +1,45 @@
+3260\. Find the Largest Palindrome Divisible by K
+
+Hard
+
+You are given two **positive** integers `n` and `k`.
+
+An integer `x` is called **k-palindromic** if:
+
+* `x` is a palindrome.
+* `x` is divisible by `k`.
+
+Return the **largest** integer having `n` digits (as a string) that is **k-palindromic**.
+
+**Note** that the integer must **not** have leading zeros.
+
+**Example 1:**
+
+**Input:** n = 3, k = 5
+
+**Output:** "595"
+
+**Explanation:**
+
+595 is the largest k-palindromic integer with 3 digits.
+
+**Example 2:**
+
+**Input:** n = 1, k = 4
+
+**Output:** "8"
+
+**Explanation:**
+
+4 and 8 are the only k-palindromic integers with 1 digit.
+
+**Example 3:**
+
+**Input:** n = 5, k = 6
+
+**Output:** "89898"
+
+**Constraints:**
+
+* 1 <= n <= 105
+* `1 <= k <= 9`
\ No newline at end of file
diff --git a/src/main/kotlin/g3201_3300/s3261_count_substrings_that_satisfy_k_constraint_ii/Solution.kt b/src/main/kotlin/g3201_3300/s3261_count_substrings_that_satisfy_k_constraint_ii/Solution.kt
new file mode 100644
index 000000000..c8edd7bcd
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3261_count_substrings_that_satisfy_k_constraint_ii/Solution.kt
@@ -0,0 +1,56 @@
+package g3201_3300.s3261_count_substrings_that_satisfy_k_constraint_ii
+
+// #Hard #Array #String #Binary_Search #Prefix_Sum #Sliding_Window
+// #2024_08_21_Time_1005_ms_(100.00%)_Space_118.6_MB_(100.00%)
+
+class Solution {
+ fun countKConstraintSubstrings(s: String, k: Int, queries: Array): LongArray {
+ val current = s.toCharArray()
+ val n = current.size
+ val prefix = LongArray(n)
+ val index = IntArray(n)
+ var i = 0
+ var count = 0
+ var count1 = 0
+ var count0 = 0
+ for (j in 0 until n) {
+ if (current[j] == '0') {
+ count0++
+ }
+ if (current[j] == '1') {
+ count1++
+ }
+ while (count0 > k && count1 > k) {
+ if (current[i] == '0') {
+ count0--
+ }
+ if (current[i] == '1') {
+ count1--
+ }
+ i++
+ index[i] = j - 1
+ }
+ count += j - i + 1
+ index[i] = j
+ prefix[j] = count.toLong()
+ }
+ while (i < n) {
+ index[i++] = n - 1
+ }
+ val result = LongArray(queries.size)
+ i = 0
+ while (i < queries.size) {
+ val indexFirst = index[queries[i][0]]
+ if (indexFirst > queries[i][1]) {
+ val num = queries[i][1] - queries[i][0] + 1L
+ result[i] = ((num) * (num + 1)) / 2
+ } else {
+ result[i] = prefix[queries[i][1]] - prefix[indexFirst]
+ val num = indexFirst - queries[i][0] + 1L
+ result[i] += ((num) * (num + 1)) / 2
+ }
+ i++
+ }
+ return result
+ }
+}
diff --git a/src/main/kotlin/g3201_3300/s3261_count_substrings_that_satisfy_k_constraint_ii/readme.md b/src/main/kotlin/g3201_3300/s3261_count_substrings_that_satisfy_k_constraint_ii/readme.md
new file mode 100644
index 000000000..9c4968aef
--- /dev/null
+++ b/src/main/kotlin/g3201_3300/s3261_count_substrings_that_satisfy_k_constraint_ii/readme.md
@@ -0,0 +1,44 @@
+3261\. Count Substrings That Satisfy K-Constraint II
+
+Hard
+
+You are given a **binary** string `s` and an integer `k`.
+
+You are also given a 2D integer array `queries`, where queries[i] = [li, ri]
.
+
+A **binary string** satisfies the **k-constraint** if **either** of the following conditions holds:
+
+* The number of `0`'s in the string is at most `k`.
+* The number of `1`'s in the string is at most `k`.
+
+Return an integer array `answer`, where `answer[i]` is the number of substrings of s[li..ri]
that satisfy the **k-constraint**.
+
+**Example 1:**
+
+**Input:** s = "0001111", k = 2, queries = [[0,6]]
+
+**Output:** [26]
+
+**Explanation:**
+
+For the query `[0, 6]`, all substrings of `s[0..6] = "0001111"` satisfy the k-constraint except for the substrings `s[0..5] = "000111"` and `s[0..6] = "0001111"`.
+
+**Example 2:**
+
+**Input:** s = "010101", k = 1, queries = [[0,5],[1,4],[2,3]]
+
+**Output:** [15,9,3]
+
+**Explanation:**
+
+The substrings of `s` with a length greater than 3 do not satisfy the k-constraint.
+
+**Constraints:**
+
+* 1 <= s.length <= 105
+* `s[i]` is either `'0'` or `'1'`.
+* `1 <= k <= s.length`
+* 1 <= queries.length <= 105
+* queries[i] == [li, ri]
+* 0 <= li <= ri < s.length
+* All queries are distinct.
\ No newline at end of file
diff --git a/src/test/kotlin/g3201_3300/s3254_find_the_power_of_k_size_subarrays_i/SolutionTest.kt b/src/test/kotlin/g3201_3300/s3254_find_the_power_of_k_size_subarrays_i/SolutionTest.kt
new file mode 100644
index 000000000..f9853c153
--- /dev/null
+++ b/src/test/kotlin/g3201_3300/s3254_find_the_power_of_k_size_subarrays_i/SolutionTest.kt
@@ -0,0 +1,31 @@
+package g3201_3300.s3254_find_the_power_of_k_size_subarrays_i
+
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.jupiter.api.Test
+
+internal class SolutionTest {
+ @Test
+ fun resultsArray() {
+ assertThat(
+ Solution().resultsArray(intArrayOf(1, 2, 3, 4, 3, 2, 5), 3),
+ equalTo(intArrayOf(3, 4, -1, -1, -1))
+ )
+ }
+
+ @Test
+ fun resultsArray2() {
+ assertThat(
+ Solution().resultsArray(intArrayOf(2, 2, 2, 2, 2), 4),
+ equalTo(intArrayOf(-1, -1))
+ )
+ }
+
+ @Test
+ fun resultsArray3() {
+ assertThat(
+ Solution().resultsArray(intArrayOf(3, 2, 3, 2, 3, 2), 2),
+ equalTo(intArrayOf(-1, 3, -1, 3, -1))
+ )
+ }
+}
diff --git a/src/test/kotlin/g3201_3300/s3255_find_the_power_of_k_size_subarrays_ii/SolutionTest.kt b/src/test/kotlin/g3201_3300/s3255_find_the_power_of_k_size_subarrays_ii/SolutionTest.kt
new file mode 100644
index 000000000..06c34ad4c
--- /dev/null
+++ b/src/test/kotlin/g3201_3300/s3255_find_the_power_of_k_size_subarrays_ii/SolutionTest.kt
@@ -0,0 +1,36 @@
+package g3201_3300.s3255_find_the_power_of_k_size_subarrays_ii
+
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.jupiter.api.Test
+
+internal class SolutionTest {
+ @Test
+ fun resultsArray() {
+ assertThat(
+ Solution().resultsArray(intArrayOf(1, 2, 3, 4, 3, 2, 5), 3),
+ equalTo(intArrayOf(3, 4, -1, -1, -1))
+ )
+ }
+
+ @Test
+ fun resultsArray2() {
+ assertThat(
+ Solution().resultsArray(intArrayOf(2, 2, 2, 2, 2), 4),
+ equalTo(intArrayOf(-1, -1))
+ )
+ }
+
+ @Test
+ fun resultsArray3() {
+ assertThat(
+ Solution().resultsArray(intArrayOf(3, 2, 3, 2, 3, 2), 2),
+ equalTo(intArrayOf(-1, 3, -1, 3, -1))
+ )
+ }
+
+ @Test
+ fun resultsArray4() {
+ assertThat(Solution().resultsArray(intArrayOf(1), 1), equalTo(intArrayOf(1)))
+ }
+}
diff --git a/src/test/kotlin/g3201_3300/s3256_maximum_value_sum_by_placing_three_rooks_i/SolutionTest.kt b/src/test/kotlin/g3201_3300/s3256_maximum_value_sum_by_placing_three_rooks_i/SolutionTest.kt
new file mode 100644
index 000000000..caf2ad0b0
--- /dev/null
+++ b/src/test/kotlin/g3201_3300/s3256_maximum_value_sum_by_placing_three_rooks_i/SolutionTest.kt
@@ -0,0 +1,34 @@
+package g3201_3300.s3256_maximum_value_sum_by_placing_three_rooks_i
+
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.jupiter.api.Test
+
+internal class SolutionTest {
+ @Test
+ fun maximumValueSum() {
+ assertThat(
+ Solution()
+ .maximumValueSum(
+ arrayOf(intArrayOf(-3, 1, 1, 1), intArrayOf(-3, 1, -3, 1), intArrayOf(-3, 2, 1, 1))
+ ),
+ equalTo(4L)
+ )
+ }
+
+ @Test
+ fun maximumValueSum2() {
+ assertThat(
+ Solution().maximumValueSum(arrayOf(intArrayOf(1, 2, 3), intArrayOf(4, 5, 6), intArrayOf(7, 8, 9))),
+ equalTo(15L)
+ )
+ }
+
+ @Test
+ fun maximumValueSum3() {
+ assertThat(
+ Solution().maximumValueSum(arrayOf(intArrayOf(1, 1, 1), intArrayOf(1, 1, 1), intArrayOf(1, 1, 1))),
+ equalTo(3L)
+ )
+ }
+}
diff --git a/src/test/kotlin/g3201_3300/s3257_maximum_value_sum_by_placing_three_rooks_ii/SolutionTest.kt b/src/test/kotlin/g3201_3300/s3257_maximum_value_sum_by_placing_three_rooks_ii/SolutionTest.kt
new file mode 100644
index 000000000..3c6200253
--- /dev/null
+++ b/src/test/kotlin/g3201_3300/s3257_maximum_value_sum_by_placing_three_rooks_ii/SolutionTest.kt
@@ -0,0 +1,34 @@
+package g3201_3300.s3257_maximum_value_sum_by_placing_three_rooks_ii
+
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.jupiter.api.Test
+
+internal class SolutionTest {
+ @Test
+ fun maximumValueSum() {
+ assertThat(
+ Solution()
+ .maximumValueSum(
+ arrayOf(intArrayOf(-3, 1, 1, 1), intArrayOf(-3, 1, -3, 1), intArrayOf(-3, 2, 1, 1))
+ ),
+ equalTo(4L)
+ )
+ }
+
+ @Test
+ fun maximumValueSum2() {
+ assertThat(
+ Solution().maximumValueSum(arrayOf(intArrayOf(1, 2, 3), intArrayOf(4, 5, 6), intArrayOf(7, 8, 9))),
+ equalTo(15L)
+ )
+ }
+
+ @Test
+ fun maximumValueSum3() {
+ assertThat(
+ Solution().maximumValueSum(arrayOf(intArrayOf(1, 1, 1), intArrayOf(1, 1, 1), intArrayOf(1, 1, 1))),
+ equalTo(3L)
+ )
+ }
+}
diff --git a/src/test/kotlin/g3201_3300/s3258_count_substrings_that_satisfy_k_constraint_i/SolutionTest.kt b/src/test/kotlin/g3201_3300/s3258_count_substrings_that_satisfy_k_constraint_i/SolutionTest.kt
new file mode 100644
index 000000000..2fe7c93f9
--- /dev/null
+++ b/src/test/kotlin/g3201_3300/s3258_count_substrings_that_satisfy_k_constraint_i/SolutionTest.kt
@@ -0,0 +1,17 @@
+package g3201_3300.s3258_count_substrings_that_satisfy_k_constraint_i
+
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.jupiter.api.Test
+
+internal class SolutionTest {
+ @Test
+ fun countKConstraintSubstrings() {
+ assertThat(Solution().countKConstraintSubstrings("10101", 1), equalTo(12))
+ }
+
+ @Test
+ fun countKConstraintSubstrings2() {
+ assertThat(Solution().countKConstraintSubstrings("1010101", 2), equalTo(25))
+ }
+}
diff --git a/src/test/kotlin/g3201_3300/s3259_maximum_energy_boost_from_two_drinks/SolutionTest.kt b/src/test/kotlin/g3201_3300/s3259_maximum_energy_boost_from_two_drinks/SolutionTest.kt
new file mode 100644
index 000000000..52e56739b
--- /dev/null
+++ b/src/test/kotlin/g3201_3300/s3259_maximum_energy_boost_from_two_drinks/SolutionTest.kt
@@ -0,0 +1,23 @@
+package g3201_3300.s3259_maximum_energy_boost_from_two_drinks
+
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.jupiter.api.Test
+
+internal class SolutionTest {
+ @Test
+ fun maxEnergyBoost() {
+ assertThat(
+ Solution().maxEnergyBoost(intArrayOf(1, 3, 1), intArrayOf(3, 1, 1)),
+ equalTo(5L)
+ )
+ }
+
+ @Test
+ fun maxEnergyBoost2() {
+ assertThat(
+ Solution().maxEnergyBoost(intArrayOf(4, 1, 1), intArrayOf(1, 1, 3)),
+ equalTo(7L)
+ )
+ }
+}
diff --git a/src/test/kotlin/g3201_3300/s3260_find_the_largest_palindrome_divisible_by_k/SolutionTest.kt b/src/test/kotlin/g3201_3300/s3260_find_the_largest_palindrome_divisible_by_k/SolutionTest.kt
new file mode 100644
index 000000000..a2d08e6fe
--- /dev/null
+++ b/src/test/kotlin/g3201_3300/s3260_find_the_largest_palindrome_divisible_by_k/SolutionTest.kt
@@ -0,0 +1,103 @@
+package g3201_3300.s3260_find_the_largest_palindrome_divisible_by_k
+
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.jupiter.api.Assertions
+import org.junit.jupiter.api.Test
+
+internal class SolutionTest {
+ @Test
+ fun largestPalindrome() {
+ assertThat(Solution().largestPalindrome(3, 5), equalTo("595"))
+ }
+
+ @Test
+ fun largestPalindrome2() {
+ assertThat(Solution().largestPalindrome(1, 4), equalTo("8"))
+ }
+
+ @Test
+ fun largestPalindrome3() {
+ assertThat(Solution().largestPalindrome(5, 6), equalTo("89898"))
+ }
+
+ @Test
+ fun largestPalindrome4() {
+ val solution = Solution()
+ Assertions.assertEquals("9", solution.largestPalindrome(1, 1))
+ Assertions.assertEquals("99", solution.largestPalindrome(2, 1))
+ Assertions.assertEquals("999", solution.largestPalindrome(3, 1))
+ }
+
+ @Test
+ fun largestPalindrome5() {
+ val solution = Solution()
+ Assertions.assertEquals("8", solution.largestPalindrome(1, 2))
+ Assertions.assertEquals("88", solution.largestPalindrome(2, 2))
+ Assertions.assertEquals("898", solution.largestPalindrome(3, 2))
+ Assertions.assertEquals("8998", solution.largestPalindrome(4, 2))
+ }
+
+ @Test
+ fun largestPalindrome6() {
+ val solution = Solution()
+ Assertions.assertEquals("9", solution.largestPalindrome(1, 3))
+ Assertions.assertEquals("99", solution.largestPalindrome(2, 3))
+ Assertions.assertEquals("999", solution.largestPalindrome(3, 3))
+ }
+
+ @Test
+ fun largestPalindrome7() {
+ val solution = Solution()
+ Assertions.assertEquals("8", solution.largestPalindrome(1, 4))
+ Assertions.assertEquals("88", solution.largestPalindrome(2, 4))
+ Assertions.assertEquals("888", solution.largestPalindrome(3, 4))
+ Assertions.assertEquals("8888", solution.largestPalindrome(4, 4))
+ Assertions.assertEquals("88988", solution.largestPalindrome(5, 4))
+ }
+
+ @Test
+ fun largestPalindrome8() {
+ val solution = Solution()
+ Assertions.assertEquals("5", solution.largestPalindrome(1, 5))
+ Assertions.assertEquals("55", solution.largestPalindrome(2, 5))
+ Assertions.assertEquals("595", solution.largestPalindrome(3, 5))
+ }
+
+ @Test
+ fun largestPalindrome9() {
+ val solution = Solution()
+ Assertions.assertEquals("6", solution.largestPalindrome(1, 6))
+ Assertions.assertEquals("66", solution.largestPalindrome(2, 6))
+ Assertions.assertEquals("8778", solution.largestPalindrome(4, 6))
+ }
+
+ @Test
+ fun largestPalindrome10() {
+ val solution = Solution()
+ Assertions.assertEquals("7", solution.largestPalindrome(1, 7))
+ Assertions.assertEquals("77", solution.largestPalindrome(2, 7))
+ Assertions.assertEquals("959", solution.largestPalindrome(3, 7))
+ Assertions.assertEquals("99799", solution.largestPalindrome(5, 7))
+ Assertions.assertEquals("999999", solution.largestPalindrome(6, 7))
+ Assertions.assertEquals("9994999", solution.largestPalindrome(7, 7))
+ }
+
+ @Test
+ fun largestPalindrome11() {
+ val solution = Solution()
+ Assertions.assertEquals("8", solution.largestPalindrome(1, 8))
+ Assertions.assertEquals("88", solution.largestPalindrome(2, 8))
+ Assertions.assertEquals("888", solution.largestPalindrome(3, 8))
+ Assertions.assertEquals("8888", solution.largestPalindrome(4, 8))
+ Assertions.assertEquals("88888", solution.largestPalindrome(5, 8))
+ }
+
+ @Test
+ fun largestPalindrome12() {
+ val solution = Solution()
+ Assertions.assertEquals("9", solution.largestPalindrome(1, 9))
+ Assertions.assertEquals("99", solution.largestPalindrome(2, 9))
+ Assertions.assertEquals("999", solution.largestPalindrome(3, 9))
+ }
+}
diff --git a/src/test/kotlin/g3201_3300/s3261_count_substrings_that_satisfy_k_constraint_ii/SolutionTest.kt b/src/test/kotlin/g3201_3300/s3261_count_substrings_that_satisfy_k_constraint_ii/SolutionTest.kt
new file mode 100644
index 000000000..b9182b1c7
--- /dev/null
+++ b/src/test/kotlin/g3201_3300/s3261_count_substrings_that_satisfy_k_constraint_ii/SolutionTest.kt
@@ -0,0 +1,26 @@
+package g3201_3300.s3261_count_substrings_that_satisfy_k_constraint_ii
+
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.jupiter.api.Test
+
+internal class SolutionTest {
+ @Test
+ fun countKConstraintSubstrings() {
+ assertThat(
+ Solution().countKConstraintSubstrings("0001111", 2, arrayOf(intArrayOf(0, 6))),
+ equalTo(longArrayOf(26))
+ )
+ }
+
+ @Test
+ fun countKConstraintSubstrings2() {
+ assertThat(
+ Solution()
+ .countKConstraintSubstrings(
+ "010101", 1, arrayOf(intArrayOf(0, 5), intArrayOf(1, 4), intArrayOf(2, 3))
+ ),
+ equalTo(longArrayOf(15, 9, 3))
+ )
+ }
+}