k Gün sonrasında Etkin ve Etkin Olmayan hücreler

N boyutunda bir ikili dizi verildiğinde burada . Dizideki doğru (veya 1) değeri etkin, yanlış (veya 0) değeri ise etkin olmadığı anlamına gelir. Bir k sayısı verildiğinde görev, k gün sonra aktif ve aktif olmayan hücrelerin sayısını bulmaktır. Her günden sonra, sol ve sağ hücreler aynı değilse i'inci hücrenin durumu aktif hale gelir, sol ve sağ hücreler aynıysa (her ikisi de 0 veya her ikisi de 1) etkisiz hale gelir. 

En soldaki hücrelerden önce ve en sağdan sonra hücre olmadığından, en soldaki hücrelerden önceki ve en sağdaki hücrelerden sonraki değer hücreleri her zaman 0 (veya etkin değil) olarak kabul edilir.

Örnekler:  

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 

Önemli olan tek şey, verilen dizinin bir kopyasını sakladığımızdan emin olmaktır çünkü önceki değerlerin ertesi gün güncellenmesine ihtiyacımız var. Aşağıda ayrıntılı adımlar bulunmaktadır. 

  1. Öncelikle hücreler[] dizisini temp[] dizisine kopyalıyoruz ve temp[] dizisinde verilen koşula göre değişiklikler yapıyoruz.
  2. Bu durumda, eğer i'inci hücrenin hemen sol ve sağ hücresi ya inaktif ya da aktifse, ertesi gün i'nin inaktif hale gelmesi yani; (hücreler[i-1] == 0 ve hücreler[i+1] == 0) veya (hücreler[i-1] == 1 ve hücreler[i+1] == 1) o zaman hücreler[i] = 0 bu koşullar, hücrelerin[i-1] ve hücrelerin[i+1] XOR'u kullanılarak uygulanabilir.
  3. 0'uncu dizin hücre sıcaklığı için[0] = 0^hücre[1] ve (n-1)'inci dizin hücre sıcaklığı[n-1] = 0^hücre[n-2] için.
  4. Şimdi dizin 1 ila n-2 için aşağıdaki işlemi yapın temp[i] = hücreler[i-1] ^ hücreler[i+1]
  5. İşlemi k gün tamamlanana kadar tekrarlayın.

Yukarıdaki adımların uygulanması aşağıdadır. 

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  (  cells    n    k  ):   # 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  (  1    n  -  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>   

Çıkış
Active Cells = 2 Inactive Cells = 6 

Zaman karmaşıklığı: Ç(N*K) burada N bir dizinin boyutu ve K gün sayısıdır.
Yardımcı alan: O(N)

Bu makale geeksforgeeks ekibi tarafından incelendi. Bu soruna daha iyi bir yaklaşımınız varsa lütfen paylaşın.