logo

Aktive og inaktive celler etter k dager

Gitt en binær matrise med størrelse n hvor n > 3 . En sann (eller 1) verdi i matrisen betyr aktiv og usann (eller 0) betyr inaktiv. Gitt et tall k er oppgaven å finne antall aktive og inaktive celler etter k dager. Etter hver dag blir statusen til i'te celle aktiv hvis venstre og høyre celle ikke er like og inaktiv hvis venstre og høyre celle er like (begge 0 eller begge 1). 

Siden det ikke er noen celler før celler lengst til venstre og etter celler lengst til høyre, anses verdicellene før celler lengst til venstre og etter celler lengst til høyre alltid som 0 (eller inaktive).



Eksempler:  

Input : cells[] = {1 0 1 1} k = 2 Output : Active cells = 3 Inactive cells = 1 After 1 day cells[] = {0 0 1 1} After 2 days cells[] = {0 1 1 1} Input : cells[] = {0 1 0 1 0 1 0 1} k = 3 Output: Active Cells = 2  Inactive Cells = 6 Explanation : After 1 day cells[] = {1 0 0 0 0 0 0 0} After 2 days cells[] = {0 1 0 0 0 0 0 0} After 3 days cells[] = {1 0 1 0 0 0 0 0} Input : cells[] = {0 1 1 1 0 1 1 0} k = 4 Output: Active Cells = 3  Inactive Cells = 5

Det eneste viktige er å sørge for at vi opprettholder en kopi av gitt array fordi vi trenger tidligere verdier for å oppdatere for neste dag. Nedenfor er detaljerte trinn. 

  1. Først kopierer vi celle[]-matrisen inn i temp[]-array og gjør endringer i temp[]-array i henhold til gitte betingelser.
  2. I tilstanden er det gitt at hvis umiddelbar venstre og høyre celle i i'te celle enten er inaktiv eller aktiv neste dag, blir jeg inaktiv, dvs.; (celler[i-1] == 0 og celler[i+1] == 0) eller (celler[i-1] == 1 og celler[i+1] == 1) så kan celler[i] = 0 disse betingelsene brukes ved å bruke XOR av celler[i-1] og celler[i+1].
  3. For 0'te indekscelletemp[0] = 0^celler[1] og for (n-1)'te indekscelletemp[n-1] = 0^celler[n-2].
  4. For indeks 1 til n-2, gjør følgende operasjon temp[i] = celler[i-1] ^ celler[i+1]
  5. Gjenta prosessen til k dager er fullført.

Følgende er implementeringen av trinnene ovenfor. 



C++
// C++ program to count active and inactive cells after k // days #include   using namespace std; // cells[] - store current status of cells // n - Number of cells // temp[] - to perform intermediate operations // k - number of days // active - count of active cells after k days // inactive - count of active cells after k days void activeAndInactive(bool cells[] int n int k) {  // copy cells[] array into temp [] array  bool temp[n];  for (int i=0; i<n ; i++)  temp[i] = cells[i];  // Iterate for k days  while (k--)  {  // Finding next values for corner cells  temp[0] = 0^cells[1];  temp[n-1] = 0^cells[n-2];  // Compute values of intermediate cells  // If both cells active or inactive then temp[i]=0  // else temp[i] = 1.  for (int i=1; i<=n-2; i++)  temp[i] = cells[i-1] ^ cells[i+1];  // Copy temp[] to cells[] for next iteration  for (int i=0; i<n; i++)  cells[i] = temp[i];  }  // count active and inactive cells  int active = 0 inactive = 0;  for (int i=0; i<n; i++)  (cells[i] == 1)? active++ : inactive++;  printf('Active Cells = %d Inactive Cells = %d'  active inactive); } // Driver program to check the test case int main() {  bool cells[] = {0 1 0 1 0 1 0 1};  int k = 3;  int n = sizeof(cells)/sizeof(cells[0]);  activeAndInactive(cells n k);  return 0; } 
Java
// Java program to count active and  // inactive cells after k days class GFG {   // cells[] - store current status  // of cells n - Number of cells // temp[] - to perform intermediate operations // k - number of days // active - count of active cells after k days // inactive - count of active cells after k days static void activeAndInactive(boolean cells[]   int n int k) {  // copy cells[] array into temp [] array  boolean temp[] = new boolean[n];  for (int i = 0; i < n; i++)  temp[i] = cells[i];  // Iterate for k days  while (k-- > 0) {    // Finding next values for corner cells  temp[0] = false ^ cells[1];  temp[n - 1] = false ^ cells[n - 2];  // Compute values of intermediate cells  // If both cells active or inactive then   // temp[i]=0 else temp[i] = 1.  for (int i = 1; i <= n - 2; i++)  temp[i] = cells[i - 1] ^ cells[i + 1];  // Copy temp[] to cells[] for next iteration  for (int i = 0; i < n; i++)  cells[i] = temp[i];  }  // count active and inactive cells  int active = 0 inactive = 0;  for (int i = 0; i < n; i++)  if (cells[i] == true)  active++;  else  inactive++;  System.out.print('Active Cells = ' + active + ' ' +   'Inactive Cells = ' + inactive); } // Driver code public static void main(String[] args)  {  boolean cells[] = {false true false true  false true false true};  int k = 3;  int n = cells.length;  activeAndInactive(cells n k); } } // This code is contributed by Anant Agarwal. 
Python3
# Python program to count # active and inactive cells after k # days # cells[] - store current # status of cells # n - Number of cells # temp[] - to perform # intermediate operations # k - number of days # active - count of active # cells after k days # inactive - count of active # cells after k days def activeAndInactive(cellsnk): # copy cells[] array into temp [] array temp=[] for i in range(n+1): temp.append(False) for i in range(n): temp[i] = cells[i] # Iterate for k days while (k >0): # Finding next values for corner cells temp[0] = False^cells[1] temp[n-1] = False^cells[n-2] # Compute values of intermediate cells # If both cells active or # inactive then temp[i]=0 # else temp[i] = 1. for i in range(1n-2+1): temp[i] = cells[i-1] ^ cells[i+1] # Copy temp[] to cells[] # for next iteration for i in range(n): cells[i] = temp[i] k-=1 # count active and inactive cells active = 0 inactive = 0; for i in range(n): if(cells[i] == True): active+=1 else: inactive+=1 print('Active Cells ='active'  '  'Inactive Cells =' inactive) # Driver code cells = [False True False True False True False True] k = 3 n =len(cells) activeAndInactive(cells n k) # This code is contributed # by Anant Agarwal. 
C#
// C# program to count active and  // inactive cells after k days using System; class GFG {   // cells[] - store current status  // of cells n - Number of cells // temp[] - to perform intermediate  // operations k - number of days // active - count of active cells  // after k days inactive - count // of active cells after k days static void activeAndInactive(bool []cells   int n int k) {    // copy cells[] array into  // temp [] array  bool []temp = new bool[n];  for (int i = 0; i < n; i++)  temp[i] = cells[i];  // Iterate for k days  while (k-- > 0) {    // Finding next values   // for corner cells  temp[0] = false ^ cells[1];  temp[n - 1] = false ^ cells[n - 2];  // Compute values of intermediate cells  // If both cells active or inactive then   // temp[i]=0 else temp[i] = 1.  for (int i = 1; i <= n - 2; i++)  temp[i] = cells[i - 1] ^ cells[i + 1];  // Copy temp[] to cells[]   // for next iteration  for (int i = 0; i < n; i++)  cells[i] = temp[i];  }  // count active and inactive cells  int active = 0 inactive = 0;  for (int i = 0; i < n; i++)  if (cells[i] == true)  active++;  else  inactive++;  Console.Write('Active Cells = ' + active + ' ' +   'Inactive Cells = ' + inactive); } // Driver code public static void Main()  {  bool []cells = {false true false true  false true false true};  int k = 3;  int n = cells.Length;  activeAndInactive(cells n k); } } // This code is contributed by Nitin Mittal. 
PHP
 // PHP program to count active  // and inactive cells after k // days // cells[] - store current status  // of cells n - Number of cells // temp[] - to perform intermediate  // operations k - number of days // active - count of active cells  // after k days inactive - count of // active cells after k days function activeAndInactive($cells $n $k) { // copy cells[] array into // temp [] array $temp = array(); for ($i = 0; $i < $n ; $i++) $temp[$i] = $cells[$i]; // Iterate for k days while ($k--) { // Finding next values  // for corner cells $temp[0] = 0 ^ $cells[1]; $temp[$n - 1] = 0 ^ $cells[$n - 2]; // Compute values of  // intermediate cells // If both cells active  // or inactive then temp[i]=0 // else temp[i] = 1. for ($i = 1; $i <= $n - 2; $i++) $temp[$i] = $cells[$i - 1] ^ $cells[$i + 1]; // Copy temp[] to cells[]  // for next iteration for ($i = 0; $i < $n; $i++) $cells[$i] = $temp[$i]; } // count active and  // inactive cells $active = 0;$inactive = 0; for ($i = 0; $i < $n; $i++) ($cells[$i] == 1)? $active++ : $inactive++; echo 'Active Cells = ' $active ' Inactive Cells = ' $inactive; } // Driver Code $cells= array(0 1 0 1 0 1 0 1); $k = 3; $n = count($cells); activeAndInactive($cells $n $k); // This code is contributed by anuj_67. ?> 
JavaScript
<script> // javascript program to count active and  // inactive cells after k days  // cells - store current status  // of cells n - Number of cells  // temp - to perform intermediate operations  // k - number of days  // active - count of active cells after k days  // inactive - count of active cells after k days  function activeAndInactive(cells  n  k)   {    // copy cells array into temp array  var temp = Array(n).fill(false);  for (i = 0; i < n; i++)  temp[i] = cells[i];  // Iterate for k days  while (k-- > 0)  {  // Finding next values for corner cells  temp[0] = false ^ cells[1];  temp[n - 1] = false ^ cells[n - 2];  // Compute values of intermediate cells  // If both cells active or inactive then  // temp[i]=0 else temp[i] = 1.  for (i = 1; i <= n - 2; i++)  temp[i] = cells[i - 1] ^ cells[i + 1];  // Copy temp to cells for next iteration  for (i = 0; i < n; i++)  cells[i] = temp[i];  }  // count active and inactive cells  var active = 0 inactive = 0;  for (i = 0; i < n; i++)  if (cells[i] == true)  active++;  else  inactive++;  document.write('Active Cells = ' + active + ' ' + 'Inactive Cells = ' + inactive);  }  // Driver code  var cells = [ false true false true false true false true ];  var k = 3;  var n = cells.length;  activeAndInactive(cells n k); // This code is contributed by Rajput-Ji </script> 

Produksjon
Active Cells = 2 Inactive Cells = 6

Tidskompleksitet: O(N*K) der N er størrelsen på en matrise og K er antall dager.
Hjelperom: O(N)

Denne artikkelen er anmeldt av team geeksforgeeks. Hvis du har en bedre tilnærming til dette problemet, del gjerne.