Dada una array, a[] consta solo de 0 y 1. La tarea es verificar si es posible transformar la array de modo que el valor AND entre cada par de índices sea 1. La única operación permitida es:
- Tome dos índices i y j y reemplace a[i] y a[j] con a[i] | a[j] donde ‘|’ significa operación OR bit a bit.
Si es posible, la salida es «SÍ», de lo contrario, la salida es «NO».
Ejemplos:
Input: arr[] = {0, 1, 0, 0, 1} Output: Yes Choose these pair of indices (0, 1), (1, 2), (3, 4). Input: arr[] = {0, 0, 0} Output: No
Enfoque: La observación principal es que, si el arreglo consta de al menos un 1, entonces la respuesta será SÍ, de lo contrario, la salida será NO porque OR con 1 nos dará 1, ya que el arreglo consta solo de 0 y 1.
Si hay al menos un 1, luego elegiremos todos los índices con un valor 0 y los reemplazaremos con un valor OR con el índice que tiene 1 y el valor OR siempre será 1. Después de todas las operaciones, la array consistirá en solo 1
y el valor AND entre cualquier par de índices será 1 como (1 AND 1)=1.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the above approach #include <bits/stdc++.h> using namespace std; // Function to check if it is possible or not bool check(int a[], int n) { for (int i = 0; i < n; i++) if (a[i]) return true; return false; } // Driver code int main() { int a[] = { 0, 1, 0, 1 }; int n = sizeof(a) / sizeof(a[0]); check(a, n) ? cout << "YES\n" : cout << "NO\n"; return 0; }
Java
// Java implementation of the above approach class GFG { // Function to check if it is possible or not static boolean check(int a[], int n) { for (int i = 0; i < n; i++) if (a[i] == 1) return true; return false; } // Driver code public static void main (String[] args) { int a[] = { 0, 1, 0, 1 }; int n = a.length; if(check(a, n) == true ) System.out.println("YES\n") ; else System.out.println("NO\n"); } } // This code is contributed by Ryuga
Python3
# Python 3 implementation of the # above approach # Function to check if it is # possible or not def check(a, n): for i in range(n): if (a[i]): return True return False # Driver code if __name__ == '__main__': a = [0, 1, 0, 1] n = len(a) if(check(a, n)): print("YES") else: print("NO") # This code is contributed by # Surendra_Gangwar
C#
// C# implementation of the above approach using System; class GFG { // Function to check if it is possible or not static bool check(int []a, int n) { for (int i = 0; i < n; i++) if (a[i] == 1) return true; return false; } // Driver code public static void Main () { int []a = { 0, 1, 0, 1 }; int n = a.Length; if(check(a, n) == true ) Console.Write("YES\n") ; else Console.Write("NO\n"); } } // This code is contributed // by Akanksha Rai
PHP
<?php // PHP implementation of the // above approach // Function to check if it is // possible or not function check($a, $n) { for ($i = 0; $i < $n; $i++) if ($a[$i]) return true; return false; } // Driver code $a = array(0, 1, 0, 1); $n = sizeof($a); if(check($a, $n)) echo "YES\n"; else echo "NO\n"; // This code is contributed // by Akanksha Rai ?>
Javascript
<script> // Javascript implementation of the above approach // Function to check if it is possible or not function check(a, n) { for (var i = 0; i < n; i++) if (a[i]) return true; return false; } // Driver code var a = [0, 1, 0, 1 ]; var n = a.length; check(a, n) ? document.write( "YES") : document.write( "NO\n"); </script>
YES