# Count passing car pairs

A non-empty binary array A consisting of size N is given where,

```0 represents a car traveling east,
1 represents a car traveling west. ```

The goal is to count passing cars. We say that a pair of cars (P, Q), where 0 <= P < Q < N, is passing when P is traveling to the east and Q is traveling to the west.

Examples:

```Input  : arr[] = {0, 1, 0, 1, 1}
Output : 5
The 5 pairs are (A[0], A[1]), (A[0], A[3]), (A[0], A[4]),
(A[2], A[3]) and (A[2], A[4]). Note that in all pairs
first element is 0, second element is 1 and index of
first element is smaller than index of second element.

Input  : arr[] = {1, 0, 0, 0, 1}
Output : 3

Input : arr[] = {0, 0, 1, 0, 0}
Output : 2
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

A simple solution is to use two nested loops. The outer loop searches for a 0, the inner loop counts number of 1s after 0. Finally we return total count.

## C++

 `// Simple C++ program to count passing cars ` `#include ` `using` `namespace` `std; ` ` `  `// Returns count of passing cars ` `int` `getPassingCars(``int` `A[], ``int` `n) ` `{ ` `    ``int` `result = 0; ` `    ``for` `(``int` `i=0; i

## Java

 `// Simple Java program to count passing cars ` `class` `GFG ` `{ ` ` `  `// Returns count of passing cars ` `static` `int` `getPassingCars(``int``[] A, ``int` `n) ` `{ ` `    ``int` `result = ``0``; ` `    ``for` `(``int` `i = ``0``; i < n - ``1``; i++) ` `    ``{ ` `    ``if` `(A[i] == ``0``) ` `    ``{ ` `        ``for` `(``int` `j = i + ``1``; j < n; j++)  ` `            ``if` `(A[j] == ``1``) ` `                ``result++;  ` `    ``}  ` `    ``} ` `    ``return` `result; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int``[] A = {``0``, ``1``, ``0``, ``1``, ``1``}; ` `    ``int` `n = A.length; ` `    ``System.out.println(getPassingCars(A, n)); ` `} ` `} ` ` `  `// This code is contributed ` `// by Code_Mech `

## Python3

 `# Simple Python 3 program to  ` `# count passing cars ` ` `  `# Returns count of passing cars ` `def` `getPassingCars(A, n): ` `    ``result ``=` `0` `    ``for` `i ``in` `range``(``0``, n ``-` `1``, ``1``): ` `        ``if` `(A[i] ``=``=` `0``): ` `            ``for` `j ``in` `range``(i ``+` `1``, n, ``1``): ` `                ``if` `(A[j]): ` `                    ``result ``+``=` `1` `         `  `    ``return` `result ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``A ``=` `[``0``, ``1``, ``0``, ``1``, ``1``] ` `    ``n ``=` `len``(A) ` `    ``print``(getPassingCars(A, n)) ` `     `  `# This code is contributed by ` `# Sanjit_Prasad `

## C#

 `// Simple C# program to count passing cars ` `using` `System; ` ` `  `class` `GFG ` `{ ` ` `  `// Returns count of passing cars ` `static` `int` `getPassingCars(``int``[] A, ``int` `n) ` `{ ` `    ``int` `result = 0; ` `    ``for` `(``int` `i = 0; i < n - 1; i++) ` `    ``{ ` `    ``if` `(A[i] == 0) ` `    ``{ ` `        ``for` `(``int` `j = i + 1; j < n; j++)  ` `            ``if` `(A[j] == 1) ` `                ``result++;  ` `    ``}  ` `    ``} ` `    ``return` `result; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main() ` `{ ` `    ``int``[] A = {0, 1, 0, 1, 1}; ` `    ``int` `n = A.Length; ` `    ``Console.WriteLine(getPassingCars(A, n)); ` `} ` `} ` ` `  `// This code is contributed ` `// by Akanksha Rai `

## PHP

 ` `

Output:

`5`

Time Complexity : O(n2)
Auxiliary Space : O(1)

An efficient solution to traverse array from right, keep track of counts of 1s from right. Whenever we see a 0, we increment the result by count of 1s.

## C++

 `// Efficient C++ program to count passing cars ` `#include ` `using` `namespace` `std; ` ` `  `// Returns count of passing cars ` `int` `getPassingCars(``int` `A[], ``int` `n) ` `{ ` `    ``// Initialize count of 1s from right ` `    ``// and result ` `    ``int` `countOne = 0, result = 0; ` `    ``while` `(n >= 1) ` `    ``{ ` `        ``if` `(A[n-1] == 1) ` `            ``countOne++; ` `        ``else` `            ``result += countOne; ` `        ``n--; ` `    ``} ` ` `  `    ``return` `result; ` `} ` ` `  `// Driver program ` `int` `main() ` `{ ` `    ``int` `A[] = {0, 1, 0, 1, 1}; ` `    ``int` `n = ``sizeof``(A)/``sizeof``(A[0]); ` `    ``cout << getPassingCars(A, n); ` `    ``return` `0; ` `} `

## Java

 `// Efficient Java program to count passing cars ` `class` `GFG ` `{ ` `     `  `// Returns count of passing cars ` `static` `int` `getPassingCars(``int` `A[], ``int` `n) ` `{ ` `    ``// Initialize count of 1s from right ` `    ``// and result ` `    ``int` `countOne = ``0``, result = ``0``; ` `    ``while` `(n >= ``1``) ` `    ``{ ` `        ``if` `(A[n-``1``] == ``1``) ` `            ``countOne++; ` `        ``else` `            ``result += countOne; ` `        ``n--; ` `    ``} ` ` `  `    ``return` `result; ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `A[] = {``0``, ``1``, ``0``, ``1``, ``1``}; ` `    ``int` `n = A.length; ` `    ``System.out.println(getPassingCars(A, n)); ` `} ` `} ` ` `  `// This code is contributed by Mukul Singh. `

## Python3

 `# Efficient Python3 program to  ` `# count passing cars  ` ` `  `# Returns count of passing cars  ` `def` `getPassingCars(A, n): ` ` `  `    ``# Initialize count of 1s  ` `    ``# from right and result  ` `    ``countOne ``=` `0``; result ``=` `0` `    ``while` `n >``=` `1``: ` `        ``if` `A[n ``-` `1``] ``=``=` `1``: ` `            ``countOne ``+``=` `1` `        ``else``: ` `            ``result ``+``=` `countOne ` `        ``n ``-``=` `1` `    ``return` `result ` ` `  `# Driver code ` `A ``=` `[``0``, ``1``, ``0``, ``1``, ``1``] ` `n ``=` `len``(A) ` `print``(getPassingCars(A, n)) ` ` `  `# This code is contributed ` `# by Shrikant13  `

## C#

 `// Efficient C# program to ` `// count passing cars ` `using` `System; ` ` `  `class` `GFG ` `{ ` `     `  `// Returns count of passing cars ` `static` `int` `getPassingCars(``int` `[]A, ``int` `n) ` `{ ` `    ``// Initialize count of 1s from right ` `    ``// and result ` `    ``int` `countOne = 0, result = 0; ` `    ``while` `(n >= 1) ` `    ``{ ` `        ``if` `(A[n - 1] == 1) ` `            ``countOne++; ` `        ``else` `            ``result += countOne; ` `        ``n--; ` `    ``} ` ` `  `    ``return` `result; ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main() ` `{ ` `    ``int` `[]A = {0, 1, 0, 1, 1}; ` `    ``int` `n = A.Length; ` `    ``Console.Write(getPassingCars(A, n)); ` `} ` `} ` ` `  `// This code is contributed ` `// by Akanksha Rai `

## PHP

 `= 1) ` `    ``{ ` `        ``if` `(``\$A``[``\$n``-1] == 1) ` `            ``\$countOne``++; ` `        ``else` `            ``\$result` `+= ``\$countOne``; ` `        ``\$n``--; ` `    ``} ` ` `  `    ``return` `\$result``; ` `} ` ` `  `// Driver Code ` `\$A` `= ``array``(0, 1, 0, 1, 1); ` `\$n` `= sizeof(``\$A``); ` `echo` `getPassingCars(``\$A``, ``\$n``); ` ` `  `// This code is contributed  ` `// by Akanksha Rai ` `?> `

Output:

`5`

Time Complexity : O(n)
Auxiliary Space : O(1)

This article is contributed by Rakesh Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.