Dada una array arr[] que consta de N enteros, la tarea es modificar la array de tal manera que arr[index] = index utilizando el número mínimo de operaciones del siguiente tipo:
- Elija cualquier índice i y cualquier número entero X , y agregue X a todos los elementos en el rango [0, i] .
- Elija cualquier índice i y cualquier entero X , y cambie arr[j] a arr[j] % X donde 0 ≤ j ≤ i .
Para cada operación realizada, imprima lo siguiente:
- Para la 1ª operación: imprima 1 i X
- Para la 2ª operación: imprima 2 i X
Nota: Se pueden aplicar un máximo de N + 1 operaciones.
Ejemplos:
Entrada: arr[] = {7, 6, 3}, N = 3
Salida:
1 2 5
1 1 2
1 0 1
2 2 3
Explicación:
1ra operación: Agregar 5 a todos los elementos hasta que el índice 2 modifica la array a {12 , 11, 8}.
2da operación: Agregar 2 a todos los elementos hasta que el índice 1 modifica la array a {14, 13, 8}.
3ra operación: Agregar 1 a todos los elementos hasta que el índice 0 modifica la array a {15, 13, 8}.
Cuarta operación: agregar 3 a todos los elementos hasta que el índice 2 modifica la array a {0, 1, 2}.
Entonces, después de 4 operaciones, se obtiene la array requerida.
Entrada: arr[] = {3, 4, 5, 6}, N = 4
Salida:
1 3 5
1 2 4
1 1 4
1 0 4
2 3 4
Enfoque: este problema se puede resolver utilizando el enfoque codicioso . A continuación se muestran los pasos:
- Aplique N operaciones de tipo 1 donde la i -ésima operación es sumar X = ( N + i – (arr[i] % N) ) hasta el índice i recorriendo la array en el orden inverso. Para cada i -ésima operación, imprima “1 i X” .
- Después de las N operaciones anteriores, la array tendrá la forma arr[i] % N = i for 0 ≤ i < N .
- Se debe realizar una operación más, que consiste en realizar el módulo de cada elemento del arreglo con N , es decir, la operación «2 (N-1) N» .
- Después de realizar las operaciones anteriores, para cada índice i , arr[i] = i .
A continuación se muestra la implementación del enfoque anterior:
C++
// CPP program for the above approach #include <bits/stdc++.h> using namespace std; // Function which makes the given // array increasing using given // operations void makeIncreasing(int arr[], int N) { // The ith operation will be // 1 i N + i - arr[i] % N for (int x = N - 1; x >= 0; x--) { int val = arr[x]; // Find the value to be added // in each operation int add = N - val % N + x; // Print the operation cout << "1 " << x << " " << add << endl; // Performing the operation for (int y = x; y >= 0; y--) { arr[y] += add; } } // Last modulo with N operation int mod = N; cout << "2 " << N - 1 << " " << mod << endl; for (int x = N - 1; x >= 0; x--) { arr[x] %= mod; } } // Driver Code int main() { // Given array arr[] int arr[] = { 7, 6, 3 }; int N = sizeof(arr) / sizeof(arr[0]); // Function Call makeIncreasing(arr, N); }
Java
// Java Program for the above approach import java.util.*; class GFG { // Function which makes the given // array increasing using given // operations static void makeIncreasing(int arr[], int N) { // The ith operation will be // 1 i N + i - arr[i] % N for (int x = N - 1; x >= 0; x--) { int val = arr[x]; // Find the value to be added // in each operation int add = N - val % N + x; // Print the operation System.out.println("1" + " " + x + " " + add); // Performing the operation for (int y = x; y >= 0; y--) { arr[y] += add; } } // Last modulo with N operation int mod = N; System.out.println("2" + " " + (N - 1) + " " + mod); for (int x = N - 1; x >= 0; x--) { arr[x] %= mod; } } // Driver code public static void main(String[] args) { // Given array arr[] int arr[] = { 7, 6, 3 }; int N = arr.length; // Function Call makeIncreasing(arr, N); } }
Python3
# python Program for the above problem # Function which makes the given # array increasing using given # operations def makeIncreasing(arr, N): # The ith operation will be # 1 i N + i - arr[i] % N for x in range( N - 1 , -1, -1): val = arr[x] # Find the value to be added # in each operation add = N - val % N + x # Print the operation print("1" + " " + str(x) + " " + str(add)) # Performing the operation for y in range(x, -1, -1): arr[y] += add # Last modulo with N operation mod = N; print("2" + " " + str(N - 1) + " " + str(mod)) for i in range( N - 1, -1, -1): arr[i] = arr[i] % mod # Driver code # Given array arr arr = [ 7, 6, 3 ] N = len(arr) # Function Call makeIncreasing(arr, N)
C#
// C# Program for the above approach using System; class GFG { // Function which makes the given // array increasing using given // operations static void makeIncreasing(int[] arr, int N) { // The ith operation will be // 1 i N + i - arr[i] % N for (int x = N - 1; x >= 0; x--) { int val = arr[x]; // Find the value to be added // in each operation int add = N - val % N + x; // Print the operation Console.WriteLine("1" + " " + x + " " + add); // Performing the operation for (int y = x; y >= 0; y--) { arr[y] += add; } } // Last modulo with N operation int mod = N; Console.WriteLine("2" + " " + (N - 1) + " " + mod); for (int x = N - 1; x >= 0; x--) { arr[x] %= mod; } } // Driver code public static void Main() { // Given array arr[] int[] arr = new int[] { 7, 6, 3 }; int N = arr.Length; // Function Call makeIncreasing(arr, N); } }
Javascript
<script> // JavaScript Program for the above approach // Function which makes the given // array increasing using given // operations function makeIncreasing(arr, N) { // The ith operation will be // 1 i N + i - arr[i] % N for (var x = N - 1; x >= 0; x--) { var val = arr[x]; // Find the value to be added // in each operation var add = N - (val % N) + x; // Print the operation document.write("1" + " " + x + " " + add + "<br>"); // Performing the operation for (var y = x; y >= 0; y--) { arr[y] += add; } } // Last modulo with N operation var mod = N; document.write("2" + " " + (N - 1) + " " + mod + "<br>"); for (var x = N - 1; x >= 0; x--) { arr[x] %= mod; } } // Driver code // Given array arr[] var arr = [7, 6, 3]; var N = arr.length; // Function Call makeIncreasing(arr, N); </script>
1 2 5 1 1 2 1 0 1 2 2 3
Complejidad de Tiempo: O(N 2 )
Espacio Auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por shobhitgupta907 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA