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.
- Öncelikle hücreler[] dizisini temp[] dizisine kopyalıyoruz ve temp[] dizisinde verilen koşula göre değişiklikler yapıyoruz.
- 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.
- 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.
- Ş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]
- İş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(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>
Çı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.