Editorial

# Problem Understanding Eldrin is tasked with finding a contiguous segment of stones whose sum of magical powers equals the target value $M$. In addition, among all such possible segments, his goal is to choose the one that contains the maximum number of prime-powered stones. If no segment sums to $M$, the solution should return $-1$. The prime numbers indicate stones with special mystical properties, and the problem thus combines two distinct challenges: - Finding a contiguous segment with a given summation property. - Counting and maximizing the number of primes in that segment. The array of stone powers is strictly positive, which hints that the two-pointer or sliding window technique could be efficiently applied. # Solution Analysis 1. **Preprocessing Primality:** - Since each stone has a power represented as a positive integer, we first preprocess each stone's value by determining if it is prime. - This preprocessing can be performed using a helper function (e.g., is\_prime) for each stone or via a sieve method if the maximum value among stones is high and checking multiple values. 2. **Sliding Window Technique:** - Given that all stone powers are positive, a sliding window (two-pointer) approach is ideal. - Initialize pointers: set two indices, `left` and `right`, at the start of the list, and maintain two variables: `current_sum` to store the sum of the current window and `current_prime_count` for the count of prime stones in the window. - Expand the window by moving the `right` pointer and adding the value (and updating the prime count according to our preprocessed flags) until `current_sum` is greater than or equal to $M$. - If `current_sum` exceeds $M$, adjust the window by moving the `left` pointer forward, subtracting the corresponding stone’s value and adjusting the prime count accordingly. - When `current_sum` is exactly $M$, update the answer with the maximum count of prime-powered stones seen so far. - Continue this process until the `right` pointer has processed all stones. 3. **Edge Cases:** - If no contiguous segment summing exactly to $M$ is found, return $-1$. - Manage scenarios where the segment could be at the beginning, middle, or end of the array. # Time and Space Complexity Analysis 1. **Time Complexity:** - Preprocessing each stone for primality takes $O(N \times \sqrt{A})$ in the worst case if a naive prime check is used, where $A$ is the value on a stone. - The sliding window technique itself runs in $O(N)$ because each stone is processed at most twice (once when the `right` pointer adds it and once when the `left` pointer removes it). - Hence, the overall time complexity is $O(N \times \sqrt{A})$ if individual prime checking is used. If a more efficient sieve is applied when appropriate, the preprocessing can be reduced accordingly. 2. **Space Complexity:** - An auxiliary array for the prime status of each stone requires $O(N)$ space. - Additional variables are used for pointers and count tracking, which require $O(1)$ extra space. - Therefore, the total space complexity is $O(N)$.

Author's Solution

GNU C++17