From f8dc81e3952a10ac3ddbd04b44930a86aace2b7f Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Sun, 10 Aug 2025 10:37:02 +0300 Subject: [PATCH 1/8] Added tasks 3643-2646 --- .../Solution.kt | 18 ++++ .../readme.md | 45 ++++++++++ .../Solution.kt | 24 ++++++ .../readme.md | 47 ++++++++++ .../Solution.kt | 33 +++++++ .../readme.md | 74 ++++++++++++++++ .../Solution.kt | 85 +++++++++++++++++++ .../readme.md | 41 +++++++++ .../SolutionTest.kt | 41 +++++++++ .../SolutionTest.kt | 31 +++++++ .../SolutionTest.kt | 31 +++++++ .../SolutionTest.kt | 17 ++++ 12 files changed, 487 insertions(+) create mode 100644 src/main/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/Solution.kt create mode 100644 src/main/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/readme.md create mode 100644 src/main/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/Solution.kt create mode 100644 src/main/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/readme.md create mode 100644 src/main/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/Solution.kt create mode 100644 src/main/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/readme.md create mode 100644 src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt create mode 100644 src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/readme.md create mode 100644 src/test/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/SolutionTest.kt create mode 100644 src/test/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/SolutionTest.kt create mode 100644 src/test/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/SolutionTest.kt create mode 100644 src/test/kotlin/g3601_3700/s3646_next_special_palindrome_number/SolutionTest.kt diff --git a/src/main/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/Solution.kt b/src/main/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/Solution.kt new file mode 100644 index 00000000..9bcdb720 --- /dev/null +++ b/src/main/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/Solution.kt @@ -0,0 +1,18 @@ +package g3601_3700.s3643_flip_square_submatrix_vertically + +// #Easy #Weekly_Contest_462 #2025_08_10_Time_0_ms_(100.00%)_Space_45.80_MB_(59.82%) + +class Solution { + fun reverseSubmatrix(grid: Array, x: Int, y: Int, k: Int): Array { + for (i in 0..1 <= n == nums.length <= 105 +* `0 <= nums[i] <= n - 1` +* `nums` is a permutation of integers from `0` to `n - 1`. \ No newline at end of file diff --git a/src/main/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/Solution.kt b/src/main/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/Solution.kt new file mode 100644 index 00000000..43f26fc9 --- /dev/null +++ b/src/main/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/Solution.kt @@ -0,0 +1,33 @@ +package g3601_3700.s3645_maximum_total_from_optimal_activation_order + +// #Medium #Weekly_Contest_462 #2025_08_10_Time_32_ms_(99.42%)_Space_63.82_MB_(35.84%) + +import java.util.Collections +import kotlin.math.min + +class Solution { + fun maxTotal(value: IntArray, limit: IntArray): Long { + val n = value.size + val groups: Array?> = arrayOfNulls>(n + 1) + for (i in 0..() + } + groups[l]!!.add(value[i]) + } + var total: Long = 0 + for (l in 1..n) { + val list = groups[l] + if (list == null) { + continue + } + list.sortWith(Collections.reverseOrder()) + val cap = min(l, list.size) + for (i in 0..1 <= n == value.length == limit.length <= 105 +* 1 <= value[i] <= 105 +* `1 <= limit[i] <= n` \ No newline at end of file diff --git a/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt b/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt new file mode 100644 index 00000000..d8db3140 --- /dev/null +++ b/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt @@ -0,0 +1,85 @@ +package g3601_3700.s3646_next_special_palindrome_number + +// #Hard #Weekly_Contest_462 #2025_08_10_Time_20_ms_(77.60%)_Space_45.50_MB_(18.75%) + +import java.util.Collections + +class Solution { + private val specials: MutableList = ArrayList() + + fun specialPalindrome(n: Long): Long { + if (specials.isEmpty()) { + init(specials) + } + var pos = specials.binarySearch(n + 1) + if (pos < 0) { + pos = -pos - 1 + } + return specials[pos] + } + + private fun init(v: MutableList) { + val half: MutableList = ArrayList() + var mid: String? + for (mask in 1..<(1 shl 9)) { + var sum = 0 + var oddCnt = 0 + for (d in 1..9) { + if ((mask and (1 shl (d - 1))) != 0) { + sum += d + if (d % 2 == 1) { + oddCnt++ + } + } + } + if (sum > 18 || oddCnt > 1) { + continue + } + half.clear() + mid = "" + for (d in 1..9) { + if ((mask and (1 shl (d - 1))) != 0) { + if (d % 2 == 1) { + mid = ('0'.code + d).toChar().toString() + } + val h = d / 2 + for (i in 0..(half) + permute(half, 0, v, mid!!) + } + v.sort() + val set: MutableSet = LinkedHashSet(v) + v.clear() + v.addAll(set) + } + + private fun permute(half: MutableList, start: Int, v: MutableList, mid: String) { + if (start == half.size) { + val left = StringBuilder() + for (c in half) { + left.append(c) + } + val right = StringBuilder(left).reverse().toString() + val s = left.toString() + mid + right + if (!s.isEmpty()) { + val x = s.toLong() + v.add(x) + } + return + } + val swapped: MutableSet = HashSet() + for (i in start..0 <= n <= 1015 \ No newline at end of file diff --git a/src/test/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/SolutionTest.kt b/src/test/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/SolutionTest.kt new file mode 100644 index 00000000..4a589685 --- /dev/null +++ b/src/test/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/SolutionTest.kt @@ -0,0 +1,41 @@ +package g3601_3700.s3643_flip_square_submatrix_vertically + +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.MatcherAssert +import org.junit.jupiter.api.Test + +internal class SolutionTest { + @Test + fun reverseSubmatrix() { + MatcherAssert.assertThat>( + Solution() + .reverseSubmatrix( + arrayOf( + intArrayOf(1, 2, 3, 4), + intArrayOf(5, 6, 7, 8), + intArrayOf(9, 10, 11, 12), + intArrayOf(13, 14, 15, 16), + ), + 1, + 0, + 3, + ), + equalTo>( + arrayOf( + intArrayOf(1, 2, 3, 4), + intArrayOf(13, 14, 15, 8), + intArrayOf(9, 10, 11, 12), + intArrayOf(5, 6, 7, 16), + ), + ), + ) + } + + @Test + fun reverseSubmatrix2() { + MatcherAssert.assertThat>( + Solution().reverseSubmatrix(arrayOf(intArrayOf(3, 4, 2, 3), intArrayOf(2, 3, 4, 2)), 0, 2, 2), + equalTo>(arrayOf(intArrayOf(3, 4, 4, 2), intArrayOf(2, 3, 2, 3))), + ) + } +} diff --git a/src/test/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/SolutionTest.kt b/src/test/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/SolutionTest.kt new file mode 100644 index 00000000..e88e8678 --- /dev/null +++ b/src/test/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/SolutionTest.kt @@ -0,0 +1,31 @@ +package g3601_3700.s3644_maximum_k_to_sort_a_permutation + +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.MatcherAssert.assertThat +import org.junit.jupiter.api.Test + +internal class SolutionTest { + @Test + fun sortPermutation() { + assertThat( + Solution().sortPermutation(intArrayOf(0, 3, 2, 1)), + equalTo(1), + ) + } + + @Test + fun sortPermutation2() { + assertThat( + Solution().sortPermutation(intArrayOf(0, 1, 3, 2)), + equalTo(2), + ) + } + + @Test + fun sortPermutation3() { + assertThat( + Solution().sortPermutation(intArrayOf(3, 2, 1, 0)), + equalTo(0), + ) + } +} diff --git a/src/test/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/SolutionTest.kt b/src/test/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/SolutionTest.kt new file mode 100644 index 00000000..1e805ae6 --- /dev/null +++ b/src/test/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/SolutionTest.kt @@ -0,0 +1,31 @@ +package g3601_3700.s3645_maximum_total_from_optimal_activation_order + +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.MatcherAssert.assertThat +import org.junit.jupiter.api.Test + +internal class SolutionTest { + @Test + fun maxTotal() { + assertThat( + Solution().maxTotal(intArrayOf(3, 5, 8), intArrayOf(2, 1, 3)), + equalTo(16L), + ) + } + + @Test + fun maxTotal2() { + assertThat( + Solution().maxTotal(intArrayOf(4, 2, 6), intArrayOf(1, 1, 1)), + equalTo(6L), + ) + } + + @Test + fun maxTotal3() { + assertThat( + Solution().maxTotal(intArrayOf(4, 1, 5, 2), intArrayOf(3, 3, 2, 3)), + equalTo(12L), + ) + } +} diff --git a/src/test/kotlin/g3601_3700/s3646_next_special_palindrome_number/SolutionTest.kt b/src/test/kotlin/g3601_3700/s3646_next_special_palindrome_number/SolutionTest.kt new file mode 100644 index 00000000..5e855e21 --- /dev/null +++ b/src/test/kotlin/g3601_3700/s3646_next_special_palindrome_number/SolutionTest.kt @@ -0,0 +1,17 @@ +package g3601_3700.s3646_next_special_palindrome_number + +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.MatcherAssert.assertThat +import org.junit.jupiter.api.Test + +internal class SolutionTest { + @Test + fun specialPalindrome() { + assertThat(Solution().specialPalindrome(2L), equalTo(22L)) + } + + @Test + fun specialPalindrome2() { + assertThat(Solution().specialPalindrome(33L), equalTo(212L)) + } +} From d664b5f775dddef0a94dc17ab77d545c74b41769 Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Sun, 10 Aug 2025 10:44:59 +0300 Subject: [PATCH 2/8] Fixed sonar --- .../g3601_3700/s3646_next_special_palindrome_number/Solution.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt b/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt index d8db3140..f81b712c 100644 --- a/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt @@ -65,7 +65,7 @@ class Solution { } val right = StringBuilder(left).reverse().toString() val s = left.toString() + mid + right - if (!s.isEmpty()) { + if (s.isNotEmpty()) { val x = s.toLong() v.add(x) } From c70f62c37f5ce31f3d67ffe43eeb563baae697f6 Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Mon, 11 Aug 2025 09:18:17 +0300 Subject: [PATCH 3/8] Improved tags --- .../s3643_flip_square_submatrix_vertically/Solution.kt | 2 +- .../s3644_maximum_k_to_sort_a_permutation/Solution.kt | 2 +- .../Solution.kt | 2 +- .../g3601_3700/s3646_next_special_palindrome_number/Solution.kt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/Solution.kt b/src/main/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/Solution.kt index 9bcdb720..aa81dc5f 100644 --- a/src/main/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/Solution.kt @@ -1,6 +1,6 @@ package g3601_3700.s3643_flip_square_submatrix_vertically -// #Easy #Weekly_Contest_462 #2025_08_10_Time_0_ms_(100.00%)_Space_45.80_MB_(59.82%) +// #Easy #Weekly_Contest_462 #2025_08_11_Time_1_ms_(100.00%)_Space_49.92_MB_(100.00%) class Solution { fun reverseSubmatrix(grid: Array, x: Int, y: Int, k: Int): Array { diff --git a/src/main/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/Solution.kt b/src/main/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/Solution.kt index e954d49c..67464fbd 100644 --- a/src/main/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/Solution.kt @@ -1,6 +1,6 @@ package g3601_3700.s3644_maximum_k_to_sort_a_permutation -// #Medium #Weekly_Contest_462 #2025_08_10_Time_1_ms_(100.00%)_Space_62.67_MB_(39.94%) +// #Medium #Weekly_Contest_462 #2025_08_11_Time_4_ms_(100.00%)_Space_83.96_MB_(100.00%) class Solution { fun sortPermutation(nums: IntArray): Int { diff --git a/src/main/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/Solution.kt b/src/main/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/Solution.kt index 43f26fc9..9864812c 100644 --- a/src/main/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/Solution.kt @@ -1,6 +1,6 @@ package g3601_3700.s3645_maximum_total_from_optimal_activation_order -// #Medium #Weekly_Contest_462 #2025_08_10_Time_32_ms_(99.42%)_Space_63.82_MB_(35.84%) +// #Medium #Weekly_Contest_462 #2025_08_11_Time_77_ms_(100.00%)_Space_88.24_MB_(100.00%) import java.util.Collections import kotlin.math.min diff --git a/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt b/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt index f81b712c..6729352a 100644 --- a/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt @@ -1,6 +1,6 @@ package g3601_3700.s3646_next_special_palindrome_number -// #Hard #Weekly_Contest_462 #2025_08_10_Time_20_ms_(77.60%)_Space_45.50_MB_(18.75%) +// #Hard #Weekly_Contest_462 #2025_08_11_Time_1758_ms_(100.00%)_Space_70.14_MB_(100.00%) import java.util.Collections From b474b861dbcbde90eda40c017872812915bf5275 Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Tue, 12 Aug 2025 11:29:39 +0300 Subject: [PATCH 4/8] Improved task 3646 --- .../Solution.kt | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt b/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt index 6729352a..90994481 100644 --- a/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt @@ -1,27 +1,29 @@ package g3601_3700.s3646_next_special_palindrome_number -// #Hard #Weekly_Contest_462 #2025_08_11_Time_1758_ms_(100.00%)_Space_70.14_MB_(100.00%) +// #Hard #Weekly_Contest_462 #2025_08_12_Time_34_ms_(100.00%)_Space_53.80_MB_(66.67%) import java.util.Collections class Solution { - private val specials: MutableList = ArrayList() + companion object { + private val SPECIALS = mutableListOf() + } fun specialPalindrome(n: Long): Long { - if (specials.isEmpty()) { - init(specials) + if (SPECIALS.isEmpty()) { + init(SPECIALS) } - var pos = specials.binarySearch(n + 1) + var pos = SPECIALS.binarySearch(n + 1) if (pos < 0) { pos = -pos - 1 } - return specials[pos] + return SPECIALS[pos] } private fun init(v: MutableList) { - val half: MutableList = ArrayList() - var mid: String? - for (mask in 1..<(1 shl 9)) { + val half = mutableListOf() + var mid: String + for (mask in 1 until (1 shl 9)) { var sum = 0 var oddCnt = 0 for (d in 1..9) { @@ -40,19 +42,19 @@ class Solution { for (d in 1..9) { if ((mask and (1 shl (d - 1))) != 0) { if (d % 2 == 1) { - mid = ('0'.code + d).toChar().toString() + mid = ('0' + d).toString() } val h = d / 2 - for (i in 0..(half) - permute(half, 0, v, mid!!) + half.sort() + permute(half, 0, v, mid) } - v.sort() - val set: MutableSet = LinkedHashSet(v) + v.sort() + val set = LinkedHashSet(v) v.clear() v.addAll(set) } @@ -63,7 +65,7 @@ class Solution { for (c in half) { left.append(c) } - val right = StringBuilder(left).reverse().toString() + val right = left.reversed().toString() val s = left.toString() + mid + right if (s.isNotEmpty()) { val x = s.toLong() @@ -71,9 +73,9 @@ class Solution { } return } - val swapped: MutableSet = HashSet() - for (i in start..() + for (i in start until half.size) { + if (half[i] in swapped) { continue } swapped.add(half[i]) From b1ee0275aefce631ea05eca3c142cd436381b56b Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Thu, 14 Aug 2025 08:30:30 +0300 Subject: [PATCH 5/8] Updated tags --- .../Solution.kt | 3 +- .../Solution.kt | 3 +- .../Solution.kt | 3 +- .../Solution.kt | 3 +- .../Solution.kt | 3 +- .../Solution.kt | 3 +- .../Solution.kt | 3 +- .../s3637_trionic_array_i/Solution.kt | 2 +- .../Solution.kt | 3 +- .../Solution.kt | 44 +++++++++---------- .../s3640_trionic_array_ii/Solution.kt | 3 +- .../Solution.kt | 3 +- .../Solution.kt | 3 +- .../Solution.kt | 2 +- 14 files changed, 46 insertions(+), 35 deletions(-) diff --git a/src/main/kotlin/g3601_3700/s3627_maximum_median_sum_of_subsequences_of_size_3/Solution.kt b/src/main/kotlin/g3601_3700/s3627_maximum_median_sum_of_subsequences_of_size_3/Solution.kt index 58b3f107..10fb46e9 100644 --- a/src/main/kotlin/g3601_3700/s3627_maximum_median_sum_of_subsequences_of_size_3/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3627_maximum_median_sum_of_subsequences_of_size_3/Solution.kt @@ -1,6 +1,7 @@ package g3601_3700.s3627_maximum_median_sum_of_subsequences_of_size_3 -// #Medium #Weekly_Contest_460 #2025_07_27_Time_46_ms_(91.67%)_Space_133.87_MB_(16.67%) +// #Medium #Array #Math #Sorting #Greedy #Game_Theory #Weekly_Contest_460 +// #2025_07_27_Time_46_ms_(91.67%)_Space_133.87_MB_(16.67%) class Solution { fun maximumMedianSum(nums: IntArray): Long { diff --git a/src/main/kotlin/g3601_3700/s3628_maximum_number_of_subsequences_after_one_inserting/Solution.kt b/src/main/kotlin/g3601_3700/s3628_maximum_number_of_subsequences_after_one_inserting/Solution.kt index ea855753..779d6b73 100644 --- a/src/main/kotlin/g3601_3700/s3628_maximum_number_of_subsequences_after_one_inserting/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3628_maximum_number_of_subsequences_after_one_inserting/Solution.kt @@ -1,6 +1,7 @@ package g3601_3700.s3628_maximum_number_of_subsequences_after_one_inserting -// #Medium #Weekly_Contest_460 #2025_07_27_Time_13_ms_(100.00%)_Space_48.00_MB_(75.00%) +// #Medium #String #Dynamic_Programming #Greedy #Prefix_Sum #Weekly_Contest_460 +// #2025_07_27_Time_13_ms_(100.00%)_Space_48.00_MB_(75.00%) class Solution { fun numOfSubsequences(s: String): Long { diff --git a/src/main/kotlin/g3601_3700/s3629_minimum_jumps_to_reach_end_via_prime_teleportation/Solution.kt b/src/main/kotlin/g3601_3700/s3629_minimum_jumps_to_reach_end_via_prime_teleportation/Solution.kt index 6d0a0ca4..f7799d33 100644 --- a/src/main/kotlin/g3601_3700/s3629_minimum_jumps_to_reach_end_via_prime_teleportation/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3629_minimum_jumps_to_reach_end_via_prime_teleportation/Solution.kt @@ -1,6 +1,7 @@ package g3601_3700.s3629_minimum_jumps_to_reach_end_via_prime_teleportation -// #Medium #Weekly_Contest_460 #2025_07_27_Time_406_ms_(100.00%)_Space_153.64_MB_(100.00%) +// #Medium #Array #Hash_Table #Math #Breadth_First_Search #Number_Theory #Weekly_Contest_460 +// #2025_07_27_Time_406_ms_(100.00%)_Space_153.64_MB_(100.00%) import java.util.ArrayDeque import kotlin.math.max diff --git a/src/main/kotlin/g3601_3700/s3633_earliest_finish_time_for_land_and_water_rides_i/Solution.kt b/src/main/kotlin/g3601_3700/s3633_earliest_finish_time_for_land_and_water_rides_i/Solution.kt index e9d0935c..95044d5f 100644 --- a/src/main/kotlin/g3601_3700/s3633_earliest_finish_time_for_land_and_water_rides_i/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3633_earliest_finish_time_for_land_and_water_rides_i/Solution.kt @@ -1,6 +1,7 @@ package g3601_3700.s3633_earliest_finish_time_for_land_and_water_rides_i -// #Easy #Biweekly_Contest_162 #2025_08_03_Time_15_ms_(100.00%)_Space_48.53_MB_(100.00%) +// #Easy #Array #Sorting #Greedy #Binary_Search #Two_Pointers #Biweekly_Contest_162 +// #2025_08_03_Time_15_ms_(100.00%)_Space_48.53_MB_(100.00%) import kotlin.math.max import kotlin.math.min diff --git a/src/main/kotlin/g3601_3700/s3634_minimum_removals_to_balance_array/Solution.kt b/src/main/kotlin/g3601_3700/s3634_minimum_removals_to_balance_array/Solution.kt index 71f61035..8040d16a 100644 --- a/src/main/kotlin/g3601_3700/s3634_minimum_removals_to_balance_array/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3634_minimum_removals_to_balance_array/Solution.kt @@ -1,6 +1,7 @@ package g3601_3700.s3634_minimum_removals_to_balance_array -// #Medium #Biweekly_Contest_162 #2025_08_03_Time_43_ms_(100.00%)_Space_66.87_MB_(100.00%) +// #Medium #Array #Sorting #Sliding_Window #Biweekly_Contest_162 +// #2025_08_03_Time_43_ms_(100.00%)_Space_66.87_MB_(100.00%) import kotlin.math.max diff --git a/src/main/kotlin/g3601_3700/s3635_earliest_finish_time_for_land_and_water_rides_ii/Solution.kt b/src/main/kotlin/g3601_3700/s3635_earliest_finish_time_for_land_and_water_rides_ii/Solution.kt index aab210d1..e4b3419f 100644 --- a/src/main/kotlin/g3601_3700/s3635_earliest_finish_time_for_land_and_water_rides_ii/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3635_earliest_finish_time_for_land_and_water_rides_ii/Solution.kt @@ -1,6 +1,7 @@ package g3601_3700.s3635_earliest_finish_time_for_land_and_water_rides_ii -// #Medium #Biweekly_Contest_162 #2025_08_03_Time_5_ms_(100.00%)_Space_73.02_MB_(100.00%) +// #Medium #Array #Sorting #Greedy #Binary_Search #Two_Pointers #Biweekly_Contest_162 +// #2025_08_03_Time_5_ms_(100.00%)_Space_73.02_MB_(100.00%) import kotlin.math.max import kotlin.math.min diff --git a/src/main/kotlin/g3601_3700/s3636_threshold_majority_queries/Solution.kt b/src/main/kotlin/g3601_3700/s3636_threshold_majority_queries/Solution.kt index e905dc04..91ae86fe 100644 --- a/src/main/kotlin/g3601_3700/s3636_threshold_majority_queries/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3636_threshold_majority_queries/Solution.kt @@ -1,6 +1,7 @@ package g3601_3700.s3636_threshold_majority_queries -// #Hard #Biweekly_Contest_162 #2025_08_03_Time_848_ms_(100.00%)_Space_99.90_MB_(100.00%) +// #Hard #Array #Hash_Table #Binary_Search #Prefix_Sum #Counting #Divide_and_Conquer +// #Biweekly_Contest_162 #2025_08_03_Time_848_ms_(100.00%)_Space_99.90_MB_(100.00%) import java.util.TreeSet import kotlin.math.max diff --git a/src/main/kotlin/g3601_3700/s3637_trionic_array_i/Solution.kt b/src/main/kotlin/g3601_3700/s3637_trionic_array_i/Solution.kt index 3194022f..df3258f4 100644 --- a/src/main/kotlin/g3601_3700/s3637_trionic_array_i/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3637_trionic_array_i/Solution.kt @@ -1,6 +1,6 @@ package g3601_3700.s3637_trionic_array_i -// #Easy #Weekly_Contest_461 #2025_08_03_Time_1_ms_(100.00%)_Space_43.69_MB_(100.00%) +// #Easy #Array #Weekly_Contest_461 #2025_08_03_Time_1_ms_(100.00%)_Space_43.69_MB_(100.00%) class Solution { fun isTrionic(nums: IntArray): Boolean { diff --git a/src/main/kotlin/g3601_3700/s3638_maximum_balanced_shipments/Solution.kt b/src/main/kotlin/g3601_3700/s3638_maximum_balanced_shipments/Solution.kt index 76970aa2..5b3f337f 100644 --- a/src/main/kotlin/g3601_3700/s3638_maximum_balanced_shipments/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3638_maximum_balanced_shipments/Solution.kt @@ -1,6 +1,7 @@ package g3601_3700.s3638_maximum_balanced_shipments -// #Medium #Weekly_Contest_461 #2025_08_03_Time_5_ms_(100.00%)_Space_78.25_MB_(100.00%) +// #Medium #Array #Dynamic_Programming #Greedy #Stack #Monotonic_Stack #Weekly_Contest_461 +// #2025_08_03_Time_5_ms_(100.00%)_Space_78.25_MB_(100.00%) import kotlin.math.max diff --git a/src/main/kotlin/g3601_3700/s3639_minimum_time_to_activate_string/Solution.kt b/src/main/kotlin/g3601_3700/s3639_minimum_time_to_activate_string/Solution.kt index b21f381e..8107c87c 100644 --- a/src/main/kotlin/g3601_3700/s3639_minimum_time_to_activate_string/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3639_minimum_time_to_activate_string/Solution.kt @@ -1,34 +1,34 @@ package g3601_3700.s3639_minimum_time_to_activate_string -// #Medium #Weekly_Contest_461 #2025_08_03_Time_160_ms_(100.00%)_Space_85.36_MB_(100.00%) - -import java.util.TreeSet +// #Medium #Array #Binary_Search #Weekly_Contest_461 +// #2025_08_14_Time_7_ms_(100.00%)_Space_79.04_MB_(50.00%) class Solution { fun minTime(s: String, order: IntArray, k: Int): Int { val n = s.length - // Use a TreeSet to maintain a sorted list of indices - val pos = TreeSet() - pos.add(-1) - pos.add(n) - // Iterate through the order of removal - var localK = k - for (t in order.indices) { + var total = n * (n + 1L) / 2 + if (total < k) { + return -1 + } + val prev = IntArray(n + 1) + val next = IntArray(n + 1) + for (i in 0..= i - val r = pos.ceiling(i) - // 'l' is the largest element <= i - val l = pos.floor(i) - // The 'cost' to remove an item is the product of the distances to its neighbors - localK -= ((i - l!!).toLong() * (r!! - i)).toInt() - pos.add(i) - // If the total cost is exhausted, return the current time 't' - if (localK <= 0) { + val left = prev[i] + val right = next[i] + total -= (i - left).toLong() * (right - i) + if (total < k) { return t } + if (left >= 0) { + next[left] = right + } + prev[right] = left } - // If all items are removed and k is not exhausted, return -1 - return -1 + return 0 } } diff --git a/src/main/kotlin/g3601_3700/s3640_trionic_array_ii/Solution.kt b/src/main/kotlin/g3601_3700/s3640_trionic_array_ii/Solution.kt index 0622dc39..e38b1912 100644 --- a/src/main/kotlin/g3601_3700/s3640_trionic_array_ii/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3640_trionic_array_ii/Solution.kt @@ -1,6 +1,7 @@ package g3601_3700.s3640_trionic_array_ii -// #Hard #Weekly_Contest_461 #2025_08_03_Time_7_ms_(100.00%)_Space_79.14_MB_(100.00%) +// #Hard #Array #Dynamic_Programming #Weekly_Contest_461 +// #2025_08_03_Time_7_ms_(100.00%)_Space_79.14_MB_(100.00%) import kotlin.math.max diff --git a/src/main/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/Solution.kt b/src/main/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/Solution.kt index aa81dc5f..ff9ea1d0 100644 --- a/src/main/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3643_flip_square_submatrix_vertically/Solution.kt @@ -1,6 +1,7 @@ package g3601_3700.s3643_flip_square_submatrix_vertically -// #Easy #Weekly_Contest_462 #2025_08_11_Time_1_ms_(100.00%)_Space_49.92_MB_(100.00%) +// #Easy #Array #Matrix #Two_Pointers #Weekly_Contest_462 +// #2025_08_11_Time_1_ms_(100.00%)_Space_49.92_MB_(100.00%) class Solution { fun reverseSubmatrix(grid: Array, x: Int, y: Int, k: Int): Array { diff --git a/src/main/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/Solution.kt b/src/main/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/Solution.kt index 9864812c..1f5d57a2 100644 --- a/src/main/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3645_maximum_total_from_optimal_activation_order/Solution.kt @@ -1,6 +1,7 @@ package g3601_3700.s3645_maximum_total_from_optimal_activation_order -// #Medium #Weekly_Contest_462 #2025_08_11_Time_77_ms_(100.00%)_Space_88.24_MB_(100.00%) +// #Medium #Array #Sorting #Greedy #Two_Pointers #Heap_Priority_Queue #Weekly_Contest_462 +// #2025_08_11_Time_77_ms_(100.00%)_Space_88.24_MB_(100.00%) import java.util.Collections import kotlin.math.min diff --git a/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt b/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt index 90994481..b547aa14 100644 --- a/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt @@ -1,6 +1,6 @@ package g3601_3700.s3646_next_special_palindrome_number -// #Hard #Weekly_Contest_462 #2025_08_12_Time_34_ms_(100.00%)_Space_53.80_MB_(66.67%) +// #Hard #Backtracking #Weekly_Contest_462 #2025_08_12_Time_34_ms_(100.00%)_Space_53.80_MB_(66.67%) import java.util.Collections From e061338318357f459442e75a55e17ed3bddd3f42 Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Thu, 14 Aug 2025 08:33:43 +0300 Subject: [PATCH 6/8] Improved task 3637 --- .../s3637_trionic_array_i/Solution.kt | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/src/main/kotlin/g3601_3700/s3637_trionic_array_i/Solution.kt b/src/main/kotlin/g3601_3700/s3637_trionic_array_i/Solution.kt index df3258f4..41636612 100644 --- a/src/main/kotlin/g3601_3700/s3637_trionic_array_i/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3637_trionic_array_i/Solution.kt @@ -1,29 +1,26 @@ package g3601_3700.s3637_trionic_array_i -// #Easy #Array #Weekly_Contest_461 #2025_08_03_Time_1_ms_(100.00%)_Space_43.69_MB_(100.00%) +// #Easy #Array #Weekly_Contest_461 #2025_08_14_Time_0_ms_(100.00%)_Space_43.15_MB_(44.56%) class Solution { fun isTrionic(nums: IntArray): Boolean { - var p = 0 - var q = 0 + var i = 1 val n = nums.size - for (i in 1.. nums[i + 1]) { - if (p != 0) { - return false - } - p = i - } - if (nums[i - 1] > nums[i] && nums[i] < nums[i + 1]) { - if (p == 0 || q != 0) { - return false - } - q = i - } + while (i < n && nums[i] > nums[i - 1]) { + i++ } - return q > 0 + if (i == n || i == 1) { + return false + } + while (i < n && nums[i] < nums[i - 1]) { + i++ + } + if (i == n) { + return false + } + while (i < n && nums[i] > nums[i - 1]) { + i++ + } + return i == n } } From 2c388f10fed58852ed5484abcfabb48cd351898e Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Thu, 14 Aug 2025 08:34:40 +0300 Subject: [PATCH 7/8] Improved task 3637 --- src/main/kotlin/g3601_3700/s3637_trionic_array_i/Solution.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/g3601_3700/s3637_trionic_array_i/Solution.kt b/src/main/kotlin/g3601_3700/s3637_trionic_array_i/Solution.kt index 41636612..7ffc1ecb 100644 --- a/src/main/kotlin/g3601_3700/s3637_trionic_array_i/Solution.kt +++ b/src/main/kotlin/g3601_3700/s3637_trionic_array_i/Solution.kt @@ -1,6 +1,6 @@ package g3601_3700.s3637_trionic_array_i -// #Easy #Array #Weekly_Contest_461 #2025_08_14_Time_0_ms_(100.00%)_Space_43.15_MB_(44.56%) +// #Easy #Array #Weekly_Contest_461 #2025_08_14_Time_1_ms_(100.00%)_Space_43.95_MB_(38.57%) class Solution { fun isTrionic(nums: IntArray): Boolean { From 8d3be9422037c02860d7c81f5b20944f3895f5ac Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Thu, 14 Aug 2025 08:57:15 +0300 Subject: [PATCH 8/8] Added tests --- .../kotlin/g3601_3700/s3637_trionic_array_i/SolutionTest.kt | 5 +++++ .../s3644_maximum_k_to_sort_a_permutation/SolutionTest.kt | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/test/kotlin/g3601_3700/s3637_trionic_array_i/SolutionTest.kt b/src/test/kotlin/g3601_3700/s3637_trionic_array_i/SolutionTest.kt index d528db93..36f2994e 100644 --- a/src/test/kotlin/g3601_3700/s3637_trionic_array_i/SolutionTest.kt +++ b/src/test/kotlin/g3601_3700/s3637_trionic_array_i/SolutionTest.kt @@ -20,4 +20,9 @@ internal class SolutionTest { equalTo(false), ) } + + @Test + fun isTrionic3() { + assertThat(Solution().isTrionic(intArrayOf(3, 7, 1)), equalTo(false)) + } } diff --git a/src/test/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/SolutionTest.kt b/src/test/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/SolutionTest.kt index e88e8678..01b7efcc 100644 --- a/src/test/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/SolutionTest.kt +++ b/src/test/kotlin/g3601_3700/s3644_maximum_k_to_sort_a_permutation/SolutionTest.kt @@ -28,4 +28,9 @@ internal class SolutionTest { equalTo(0), ) } + + @Test + fun sortPermutation4() { + assertThat(Solution().sortPermutation(intArrayOf(0, 1)), equalTo(0)) + } }