Dados tres enteros L , R y K , la tarea es encontrar el XOR bit a bit mínimo de como máximo K enteros entre [L, R] .
Ejemplos:
Entrada: L = 1, R = 10, K = 3
Salida: 0
Explicación:
Elija los elementos 4, 5 y 1 en el rango [1, 10] y el Bitwise XOR de los elementos elegidos es 0, que es el mínimo.Entrada: L = 32, R = 33, K = 2
Salida: 1
Explicación:
Elija los elementos 32 y 33 en el rango [32, 33] y el Bitwise XOR de los elementos elegidos es 1, que es el mínimo.
Enfoque: Una observación que nos ayuda a resolver el problema es el XOR bit a bit de dos números X y (X+1) es 1 si X es un número par. Así, el Bitwise XOR de cuatro números consecutivos sería 0 si el primero es par.
Siga los pasos a continuación para resolver el problema:
- Si el valor de K es mayor que 4 , la respuesta siempre es 0. (Esto se debe a que siempre se pueden encontrar cuatro números X, (X+1), (X+2) y (X+3) en un rango de 5 donde X es un número par).
- Si el valor de K es 2 , llame a la función func2() que toma L, R y K como parámetros de entrada y hace lo siguiente:
- Si el valor de (RL) es mayor o igual a 2 , es decir, hay al menos 3 números en el rango, devuelve 1. (Esto se debe a que dos números X y X+1 siempre se pueden encontrar en un rango de 3 donde X es un número par).
- De lo contrario, devuelve el mínimo de L y (L^R).
- Si el valor de K es 3 , llame a la función func3() que toma L, R y K como parámetros de entrada y hace lo siguiente:
- Si (R^L) se encuentra entre L y R , devuelve 0 . (Esto se debe a que (R^L)^L^R=0) )
- De lo contrario, devuelve func2 (L, R, K)
- Si el valor de K es 4 , llame a la función func4() que toma L, R y K como parámetros de entrada y hace lo siguiente:
- Si (RL) es mayor o igual a 4 , es decir, hay al menos 5 números en el rango, devuelve 0. (Esto se debe a que cuatro números X,(X+1),(X+2) y (X+ 3) siempre se puede encontrar en un rango de 5 donde X es un número par).
- De lo contrario, devuelva el mínimo de Xor de los cuatro números en el rango [L, R] y func3(L, R, K) .
- De lo contrario, devuelve L.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function for K=2 int func2(int L, int R, int K) { if (R - L >= 2) return 1; return min(L, L ^ R); } // Function for K=2 int func3(int L, int R, int K) { if ((R ^ L) > L && (R ^ L) < R) return 0; return func2(L, R, K); } // Function for K=2 int func4(int L, int R, int K) { if (R - L >= 4) return 0; int minval = L ^ (L + 1) ^ (L + 2) ^ (L + 3); return min(minval, func3(L, R, K)); } // Function to calculate the minimum XOR of at most K // elements in [L, R] int minimumXor(int L, int R, int K) { if (K > 4) return 0; else if (K == 4) return func4(L, R, K); else if (K == 3) return func3(L, R, K); else if (K == 2) return func2(L, R, K); else return L; } // Driver code int main() { // Input int L = 1, R = 3, K = 3; // Function call cout << minimumXor(L, R, K) << endl; return 0; }
Java
// Java program for the above approach import java.io.*; class GFG { // Function for K=2 static int func2(int L, int R, int K) { if (R - L >= 2) return 1; return Math.min(L, L ^ R); } // Function for K=2 static int func3(int L, int R, int K) { if ((R ^ L) > L && (R ^ L) < R) return 0; return func2(L, R, K); } // Function for K=2 static int func4(int L, int R, int K) { if (R - L >= 4) return 0; int minval = L ^ (L + 1) ^ (L + 2) ^ (L + 3); return Math.min(minval, func3(L, R, K)); } // Function to calculate the minimum XOR of at most K // elements in [L, R] static int minimumXor(int L, int R, int K) { if (K > 4) return 0; else if (K == 4) return func4(L, R, K); else if (K == 3) return func3(L, R, K); else if (K == 2) return func2(L, R, K); else return L; } // Driver code public static void main(String[] args) { // Input int L = 1, R = 3, K = 3; // Function call System.out.println( minimumXor(L, R, K)); } } // This code is contributed by sanjoy_62.
Python3
# Python program for the above approach # Function for K=2 def func2(L, R, K): if (R - L >= 2): return 1 return min(L, L ^ R) # Function for K=2 def func3(L, R, K): if ((R ^ L) > L and (R ^ L) < R): return 0 return func2(L, R, K) # Function for K=2 def func4(L, R, K): if (R - L >= 4): return 0 minval = L ^ (L + 1) ^ (L + 2) ^ (L + 3) return min(minval, func3(L, R, K)) # Function to calculate the minimum XOR of at most K # elements in [L, R] def minimumXor(L, R, K): if (K > 4): return 0 elif (K == 4): return func4(L, R, K) elif (K == 3): return func3(L, R, K) elif (K == 2): return func2(L, R, K) else: return L # Driver code if __name__ == '__main__': # Input L, R, K = 1, 3, 3 # Function call print (minimumXor(L, R, K)) # This code is contributed by mohit kumar 29.
C#
// C# program for the above approach using System; class GFG { // Function for K=2 static int func2(int L, int R, int K) { if (R - L >= 2) return 1; return Math.Min(L, L ^ R); } // Function for K=2 static int func3(int L, int R, int K) { if ((R ^ L) > L && (R ^ L) < R) return 0; return func2(L, R, K); } // Function for K=2 static int func4(int L, int R, int K) { if (R - L >= 4) return 0; int minval = L ^ (L + 1) ^ (L + 2) ^ (L + 3); return Math.Min(minval, func3(L, R, K)); } // Function to calculate the minimum XOR of at most K // elements in [L, R] static int minimumXor(int L, int R, int K) { if (K > 4) return 0; else if (K == 4) return func4(L, R, K); else if (K == 3) return func3(L, R, K); else if (K == 2) return func2(L, R, K); else return L; } // Driver code static void Main() { // Input int L = 1, R = 3, K = 3; // Function call Console.Write( minimumXor(L, R, K)); } } // This code is contributed by code_hunt.
Javascript
<script> // Javascript program for the above approach // Function for K=2 function func2(L, R, K) { if (R - L >= 2) return 1; return Mat.min(L, L ^ R); } // Function for K=2 function func3(L, R, K) { if ((R ^ L) > L && (R ^ L) < R) return 0; return func2(L, R, K); } // Function for K=2 function func4(L, R, K) { if (R - L >= 4) return 0; var minval = L ^ (L + 1) ^ (L + 2) ^ (L + 3); return Math.min(minval, func3(L, R, K)); } // Function to calculate the minimum XOR // of at most K elements in [L, R] function minimumXor(L, R, K) { if (K > 4) return 0; else if (K == 4) return func4(L, R, K); else if (K == 3) return func3(L, R, K); else if (K == 2) return func2(L, R, K); else return L; } // Driver code // Input var L = 1, R = 3, K = 3; // Function call document.write(minimumXor(L, R, K)); // This code is contributed by SURENDRA_GANGWAR </script>
0
Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1)