Reduce all array elements to zero by performing given operations thrice
Last Updated : 21 Apr, 2021
Given an array arr[] of size N, the task is to convert every array element to 0 by applying the following operations exactly three times:
- Select a subarray.
- Increment every element of the subarray by the integer multiple of its length.
Finally, print the first and last indices of the subarray involved and the elements added to every index of the subarray in each step.
Examples:
Input: arr[] = {1, 3, 2, 4}
Output:
Operation 1: 1 1
Added elements: 1
Operation 2: 3 4
Added elements: 4 2
Operation 3: 2 4
Added elements: -3 -6 -6
Explanation:
Step 1: Select subarray {arr[1]} and add -1 to the only element in the subarray. Hence, the array arr[] modifies to {0, 3, 2, 4}.
Step 2: Select subarray {arr[3], arr[4]} and add {4, 2} to the subarray elements respectively. Hence, the array arr[] modifies to {0, 3, 6, 6}.
Step 3: Select subarray {arr[2], arr[4]} and add {-3, -6, -6} to the subarray elements respectively. Hence, the array arr[] modifies to {0, 0, 0, 0}
Input: arr[] = { 5 }
Output:
Operation 1 : 1 1
Added elements: -5
Operation 2 : 1 1
Added elements: 5
Operation 3 : 1 1
Added elements: -5
Approach: The given problem can be solved based on the following observations:
Operation 1: Select subarray {arr[1], .., arr[N]}. Set A[i] = A[i] - N * A[i] = (N - 1) * (-A[i]).
After operation 1, each element is a multiple of (N - 1).
Operation 2: Select subarray {arr[1], .. arr[N - 1]}. Add / Subtract a multiple of (N - 1) to all values of the subarray till they reduce to 0.
Operation 3: Select subarray {arr[N]}, of size 1. Add / Subtract a multiple of 1 to make A[N] = 0.
Follow the steps below to solve the problem:
- If N is equal to 1, then print -arr[0], +arr[0], -arr[0] respectively in three moves.
- Otherwise, perform the following operations:
- Print 1 N. Subtract N * arr[i] from each element of the array print the subtracted elements.
- Print 1 N - 1. Subtract (N - 1) * arr[i] from each element of the subarray and print the subtracted values.
- Finally, print N. Subtract arr[i - 1] from the element. Print arr[i - 1].
Below is the implementation of the above approach:
C++ // C++ program of the above approach #include <bits/stdc++.h> using namespace std; // Function to reduce all // array elements to zero void ConvertArray(int arr[], int N) { // If size of array is 1 if (N == 1) { // First operation cout << "Operation 1 : " << 1 << " " << 1 << endl; cout << "Added elements: " << -1 * arr[0] << endl; cout << endl; // 2nd Operation cout << "Operation 2 : " << 1 << " " << 1 << endl; cout << "Added elements: " << 1 * arr[0] << endl; cout << endl; // 3rd Operation cout << "Operation 3 : " << 1 << " " << 1 << endl; cout << "Added elements: " << -1 * arr[0] << endl; } // Otherwise else { // 1st Operation cout << "Operation 1 : " << 1 << " " << N << endl; cout << "Added elements: "; for (int i = 0; i < N; i++) { cout << -1 * arr[i] * N << " "; } cout << endl; cout << endl; // 2nd Operation cout << "Operation 2 : " << 1 << " " << N - 1 << endl; cout << "Added elements: "; for (int i = 0; i < N - 1; i++) { cout << arr[i] * (N - 1) << " "; } cout << endl; cout << endl; // 3rd Operation cout << "Operation 3 : " << N << " " << N << endl; cout << "Added elements: "; cout << arr[N - 1] * (N - 1) << endl; } } // Driver Code int main() { // Input int arr[] = { 1, 3, 2, 4 }; int N = sizeof(arr) / sizeof(arr[0]); // Function call to make all // array elements equal to 0 ConvertArray(arr, N); return 0; }
Java // Java program for the above approach import java.util.*; class GFG{ // Function to reduce all // array elements to zero static void ConvertArray(int arr[], int N) { // If size of array is 1 if (N == 1) { // First operation System.out.println("Operation 1 : " + 1 + " " + 1 ); System.out.println("Added elements: " + -1 * arr[0] ); System.out.println(); // 2nd Operation System.out.println("Operation 2 : " + 1 + " " + 1 ); System.out.println("Added elements: " + 1 * arr[0] ); System.out.println(); // 3rd Operation System.out.println("Operation 3 : " + 1 + " " + 1 ); System.out.println("Added elements: " + -1 * arr[0] ); } // Otherwise else { // 1st Operation System.out.println("Operation 1 : " + 1 + " " + N ); System.out.print("Added elements: "); for (int i = 0; i < N; i++) { System.out.print(-1 * arr[i] * N + " "); } System.out.println(); System.out.println(); // 2nd Operation System.out.println("Operation 2 : " + 1 + " " + (N - 1) ); System.out.print("Added elements: "); for (int i = 0; i < N - 1; i++) { System.out.print(arr[i] * (N - 1) + " "); } System.out.println(); System.out.println(); // 3rd Operation System.out.println("Operation 3 : " + N + " " + N ); System.out.print("Added elements: "); System.out.println(arr[N - 1] * (N - 1) ); } } // Driver code public static void main(String[] args) { // Input int arr[] = { 1, 3, 2, 4 }; int N = arr.length; // Function call to make all // array elements equal to 0 ConvertArray(arr, N); } } // This code is contributed by souravghosh0416.
Python3 # Python 3 program of the above approach # Function to reduce all # array elements to zero def ConvertArray(arr, N): # If size of array is 1 if (N == 1): # First operation print("Operation 1 :",1,1) print("Added elements:",-1 * arr[0]) print("\n",end = "") # 2nd Operation print("Operation 2 :",1,1) print("Added elements:",1 * arr[0]) print("\n",end = "") # 3rd Operation print("Operation 3 :",1,1) print("Added elements:",-1 * arr[0]) print("\n",end = "") # Otherwise else: # 1st Operation print("Operation 1 :",1,N) print("Added elements:",end = " ") for i in range(N): print(-1 * arr[i] * N,end = " ") print("\n") # 2nd Operation print("Operation 2 :",1,N - 1) print("Added elements:",end = " ") for i in range(N - 1): print(arr[i] * (N - 1),end = " ") print("\n") # 3rd Operation print("Operation 3 : ",N,N) print("Added elements:",end = " ") print(arr[N - 1] * (N - 1)) # Driver Code if __name__ == '__main__': # Input arr = [1, 3, 2, 4] N = len(arr) # Function call to make all # array elements equal to 0 ConvertArray(arr, N) # This code is contributed by ipg2016107.
C# // C# program for the above approach using System; class GFG{ // Function to reduce all // array elements to zero static void ConvertArray(int[] arr, int N) { // If size of array is 1 if (N == 1) { // First operation Console.WriteLine("Operation 1 : " + 1 + " " + 1 ); Console.WriteLine("Added elements: " + -1 * arr[0] ); Console.WriteLine(); // 2nd Operation Console.WriteLine("Operation 2 : " + 1 + " " + 1 ); Console.WriteLine("Added elements: " + 1 * arr[0] ); Console.WriteLine(); // 3rd Operation Console.WriteLine("Operation 3 : " + 1 + " " + 1 ); Console.WriteLine("Added elements: " + -1 * arr[0] ); } // Otherwise else { // 1st Operation Console.WriteLine("Operation 1 : " + 1 + " " + N ); Console.Write("Added elements: "); for (int i = 0; i < N; i++) { Console.Write(-1 * arr[i] * N + " "); } Console.WriteLine(); Console.WriteLine(); // 2nd Operation Console.WriteLine("Operation 2 : " + 1 + " " + (N - 1) ); Console.Write("Added elements: "); for (int i = 0; i < N - 1; i++) { Console.Write(arr[i] * (N - 1) + " "); } Console.WriteLine(); Console.WriteLine(); // 3rd Operation Console.WriteLine("Operation 3 : " + N + " " + N ); Console.Write("Added elements: "); Console.WriteLine(arr[N - 1] * (N - 1) ); } } // Driver Code public static void Main(string[] args) { // Input int[] arr = { 1, 3, 2, 4 }; int N = arr.Length; // Function call to make all // array elements equal to 0 ConvertArray(arr, N); } } // This code is contributed by code_hunt.
JavaScript <script> // javascript program for the above approach // Function to reduce all // array elements to zero function ConvertArray(arr, N) { // If size of array is 1 if (N == 1) { // First operation document.write("Operation 1 : " + 1 + " " + 1+ "<br/>"); document.write("Added elements: " + -1 * arr[0]+"<br/>"); document.write("<br/>"); // 2nd Operation document.write("Operation 2 : " + 1 + " " + 1+"<br/>"); document.write("Added elements: " + 1 * arr[0]+"<br/>"); document.write("<br/>"); // 3rd Operation document.write("Operation 3 : " + 1 + " " + 1+"<br/>"); document.write("Added elements: " + -1 * arr[0]+"<br/>"); } // Otherwise else { // 1st Operation document.write("Operation 1 : " + 1 + " " + N+"<br/>"); document.write("Added elements: "); for (i = 0; i < N; i++) { document.write(-1 * arr[i] * N + " "); } document.write("<br/>"); document.write("<br/>"); // 2nd Operation document.write("Operation 2 : " + 1 + " " + (N - 1)+"<br/>"); document.write("Added elements: "); for (i = 0; i < N - 1; i++) { document.write(arr[i] * (N - 1) + " "); } document.write("<br/>"); document.write("<br/>"); // 3rd Operation document.write("Operation 3 : " + N + " " + N+"<br/>"); document.write("Added elements: "); document.write(arr[N - 1] * (N - 1)+"<br/>"); } } // Driver code // Input var arr = [ 1, 3, 2, 4 ]; var N = arr.length; // Function call to make all // array elements equal to 0 ConvertArray(arr, N); // This code is contributed by todaysgaurav. </script>
Output: Operation 1 : 1 4 Added elements: -4 -12 -8 -16 Operation 2 : 1 3 Added elements: 3 9 6 Operation 3 : 4 4 Added elements: 12
Time Complexity: O(N)
Auxiliary Space: O(1)
Similar Reads
Check if at least half array is reducible to zero by performing some operations
Given an array of n-positive elements. In each operation, you can select some elements and decrease them by 1 and increase remaining elements by m. The task is to determine that whether after some iterations is it possible to have at least half of elements of given array equal to zero or not. Exampl
6 min read
Minimize Cost to reduce the Array to a single element by given operations
Given an array a[] consisting of N integers and an integer K, the task is to find the minimum cost to reduce the given array to a single element by choosing any pair of consecutive array elements and replace them by (a[i] + a[i+1]) for a cost K * (a[i] + a[i+1]). Examples: Input: a[] = {1, 2, 3}, K
15+ min read
Reduce the array to a single element with the given operation
Given an integer N and an array arr containing integers from 1 to N in a sorted fashion. The task is to reduce the array to a single element by performing the following operation: All the elements in the odd positions will be removed after a single operation. This operation will be performed until o
4 min read
Check if all array elements can be removed by the given operations
Given an array arr[] containing distinct elements, the task is to check if all array elements can be removed by the selecting any two adjacent indices such that arr[i] < arr[i+1] and removing one of the two elements or both at each step. If it is possible, then print "Yes". Otherwise, print "No".
4 min read
Minimum operations to reduce array elements to zero using prefix operations and updates
Given an array arr[] of length N. We can apply 2 types of operations on element of arr[]: Choose a prefix let say arr[0, i] (0 <= i < N) and decrement all elements of prefix by 1. This operation can only apply if all elements in the prefix > 0. Choose an element arr[i] (0 <= i < N) an
8 min read
Minimum no. of operations required to make all Array Elements Zero
Given an array of N elements and each element is either 1 or 0. You need to make all the elements of the array equal to 0 by performing the below operations: If an element is 1, You can change it's value equal to 0 then, if the next consecutive element is 1, it will automatically get converted to 0.
12 min read
Find the index which is the last to be reduced to zero after performing a given operation
Given an integer array arr[] of size N and an integer K, the task is to find the index which will be the last to be reduced to zero after performing a given operation. The operation is described as follows: Starting from arr[0] to arr[N - 1], update each element as arr[i] = arr[i] - K.If arr[i] <
6 min read
Minimum possible sum of array elements after performing the given operation
Given an array arr[] of size N and a number X. If any sub array of the array(possibly empty) arr[i], arr[i+1], ... can be replaced with arr[i]/x, arr[i+1]/x, .... The task is to find the minimum possible sum of the array which can be obtained. Note: The given operation can only be performed once.Exa
9 min read
Make the array elements equal by performing given operations minimum number of times
Given an array arr[] of size N, the task is to make all the array elements equal by performing following operations minimum number of times: Increase all array elements of any suffix array by 1.Decrease all the elements of any suffix array by 1.Replace any array element y another. Examples: Input: a
7 min read
Minimum element left from the array after performing given operations
Given an array arr[] of N integers, the task is to remove the elements from both the ends of the array i.e. in a single operation, either the first or the last element can be removed from the current remaining elements of the array. This operation needs to be performed in such a way that the last el
3 min read