Active and Inactive cells after k Days
Last Updated :
05 Jul, 2022
Given a binary array of size n where n > 3. A true (or 1) value in the array means active and false (or 0) means inactive. Given a number k, the task is to find count of active and inactive cells after k days. After every day, status of i’th cell becomes active if left and right cells are not same and inactive if left and right cell are same (both 0 or both 1).
Since there are no cells before leftmost and after rightmost cells, the value cells before leftmost and after rightmost cells is always considered as 0 (or inactive).
Examples:
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
The only important thing is to make sure that we maintain a copy of given array because we need previous values to update for next day. Below are detailed steps.
- First we copy the cells[] array into temp[] array and make changes in temp[] array according to given condition.
- In the condition, it is given that if immediate left and right cell of i’th cell either inactive or active the next day i becomes inactive i.e; (cells[i-1] == 0 and cells[i+1] == 0) or (cells[i-1] == 1 and cells[i+1] == 1) then cells[i] = 0, these conditions can be applied using XOR of cells[i-1] and cells[i+1].
- For 0’th index cell temp[0] = 0^cells[1] and for (n-1)’th index cell temp[n-1] = 0^cells[n-2].
- Now for index 1 to n-2, do the following operation temp[i] = cells[i-1] ^ cells[i+1]
- Repeat the process till k days are completed.
Following is the implementation of above steps.
C++
#include<bits/stdc++.h>
using namespace std;
void activeAndInactive( bool cells[], int n, int k)
{
bool temp[n];
for ( int i=0; i<n ; i++)
temp[i] = cells[i];
while (k--)
{
temp[0] = 0^cells[1];
temp[n-1] = 0^cells[n-2];
for ( int i=1; i<=n-2; i++)
temp[i] = cells[i-1] ^ cells[i+1];
for ( int i=0; i<n; i++)
cells[i] = temp[i];
}
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);
}
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
class GFG {
static void activeAndInactive( boolean cells[],
int n, int k)
{
boolean temp[] = new boolean [n];
for ( int i = 0 ; i < n; i++)
temp[i] = cells[i];
while (k-- > 0 ) {
temp[ 0 ] = false ^ cells[ 1 ];
temp[n - 1 ] = false ^ cells[n - 2 ];
for ( int i = 1 ; i <= n - 2 ; i++)
temp[i] = cells[i - 1 ] ^ cells[i + 1 ];
for ( int i = 0 ; i < n; i++)
cells[i] = temp[i];
}
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);
}
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);
}
}
|
Python3
def activeAndInactive(cells,n,k):
temp = []
for i in range (n + 1 ):
temp.append( False )
for i in range (n):
temp[i] = cells[i]
while (k > 0 ):
temp[ 0 ] = False ^cells[ 1 ]
temp[n - 1 ] = False ^cells[n - 2 ]
for i in range ( 1 ,n - 2 + 1 ):
temp[i] = cells[i - 1 ] ^ cells[i + 1 ]
for i in range (n):
cells[i] = temp[i]
k - = 1
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)
cells = [ False , True , False , True ,
False , True , False , True ]
k = 3
n = len (cells)
activeAndInactive(cells, n, k)
|
C#
using System;
class GFG {
static void activeAndInactive( bool []cells,
int n, int k)
{
bool []temp = new bool [n];
for ( int i = 0; i < n; i++)
temp[i] = cells[i];
while (k-- > 0) {
temp[0] = false ^ cells[1];
temp[n - 1] = false ^ cells[n - 2];
for ( int i = 1; i <= n - 2; i++)
temp[i] = cells[i - 1] ^ cells[i + 1];
for ( int i = 0; i < n; i++)
cells[i] = temp[i];
}
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);
}
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);
}
}
|
PHP
<?php
function activeAndInactive( $cells , $n , $k )
{
$temp = array ();
for ( $i = 0; $i < $n ; $i ++)
$temp [ $i ] = $cells [ $i ];
while ( $k --)
{
$temp [0] = 0 ^ $cells [1];
$temp [ $n - 1] = 0 ^ $cells [ $n - 2];
for ( $i = 1; $i <= $n - 2; $i ++)
$temp [ $i ] = $cells [ $i - 1] ^
$cells [ $i + 1];
for ( $i = 0; $i < $n ; $i ++)
$cells [ $i ] = $temp [ $i ];
}
$active = 0; $inactive = 0;
for ( $i = 0; $i < $n ; $i ++)
( $cells [ $i ] == 1)? $active ++ : $inactive ++;
echo "Active Cells = " , $active , " ,Inactive Cells = " ,
$inactive ;
}
$cells = array (0, 1, 0, 1, 0, 1, 0, 1);
$k = 3;
$n = count ( $cells );
activeAndInactive( $cells , $n , $k );
?>
|
Javascript
<script>
function activeAndInactive(cells , n , k)
{
var temp = Array(n).fill( false );
for (i = 0; i < n; i++)
temp[i] = cells[i];
while (k-- > 0)
{
temp[0] = false ^ cells[1];
temp[n - 1] = false ^ cells[n - 2];
for (i = 1; i <= n - 2; i++)
temp[i] = cells[i - 1] ^ cells[i + 1];
for (i = 0; i < n; i++)
cells[i] = temp[i];
}
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);
}
var cells = [ false , true , false , true , false , true , false , true ];
var k = 3;
var n = cells.length;
activeAndInactive(cells, n, k);
</script>
|
Output
Active Cells = 2, Inactive Cells = 6
Time complexity: O(N*K) where N is size of an array and K is number of days.
Auxiliary space: O(N)
This article is reviewed by team geeksforgeeks. If you have better approach for this problem please share.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...