Given two integer arrays P[] and Q[], where pi and qj for each 0 <= i < size(P) and 0 <= j < size(Q) represents the line equations x – y = -pi and x + y = qj respectively. The task is to find the number of pairs from P[] and Q[] having integer intersection points.
Examples:
Input: P[] = {1, 3, 2}, Q[] = {3, 0}
Output: 3
The pairs of lines (p, q) having integer intersection points are (1, 3), (2, 0) and (3, 3). Here p is the line parameter of P[] and q is the that of Q[].Input: P[] = {1, 4, 3, 2}, Q[] = {3, 6, 10, 11}
Output: 8
Approach:
- The problem can be solved easily by solving the two equations and analyzing the condition for integer intersection points.
- The two equations are x – y = -p and x + y = q.
- Solving for x and y we get, x = (q-p)/2 and y = (p+q)/2.
- It is clear that integer intersection point is possible if and only if p and q have same parity.
- Let p0 and p1 be the number of even and odd pi respectively.
- Similarly, q0 and q1 for the number of even and odd qi respectively.
- Therefore the required answers is p0 * q0 + p1 * q1.
Below is the implementation of the above approach:
// C++ program to Number of pairs of lines // having integer intersection points #include <bits/stdc++.h> using namespace std;
// Count number of pairs of lines // having integer intersection point int countPairs( int * P, int * Q, int N, int M)
{ // Initialize arrays to store counts
int A[2] = { 0 }, B[2] = { 0 };
// Count number of odd and even Pi
for ( int i = 0; i < N; i++)
A[P[i] % 2]++;
// Count number of odd and even Qi
for ( int i = 0; i < M; i++)
B[Q[i] % 2]++;
// Return the count of pairs
return (A[0] * B[0] + A[1] * B[1]);
} // Driver code int main()
{ int P[] = { 1, 3, 2 }, Q[] = { 3, 0 };
int N = sizeof (P) / sizeof (P[0]);
int M = sizeof (Q) / sizeof (Q[0]);
cout << countPairs(P, Q, N, M);
return 0;
} |
// Java program to Number of pairs of lines // having integer intersection points class GFG
{ // Count number of pairs of lines // having integer intersection point static int countPairs( int []P, int []Q,
int N, int M)
{ // Initialize arrays to store counts
int []A = new int [ 2 ], B = new int [ 2 ];
// Count number of odd and even Pi
for ( int i = 0 ; i < N; i++)
A[P[i] % 2 ]++;
// Count number of odd and even Qi
for ( int i = 0 ; i < M; i++)
B[Q[i] % 2 ]++;
// Return the count of pairs
return (A[ 0 ] * B[ 0 ] + A[ 1 ] * B[ 1 ]);
} // Driver code public static void main(String[] args)
{ int []P = { 1 , 3 , 2 };
int []Q = { 3 , 0 };
int N = P.length;
int M = Q.length;
System.out.print(countPairs(P, Q, N, M));
} } // This code is contributed by Rajput-Ji |
# Python3 program to Number of pairs of lines # having eger ersection pos # Count number of pairs of lines # having eger ersection po def countPairs(P, Q, N, M):
# Initialize arrays to store counts
A = [ 0 ] * 2
B = [ 0 ] * 2
# Count number of odd and even Pi
for i in range (N):
A[P[i] % 2 ] + = 1
# Count number of odd and even Qi
for i in range (M):
B[Q[i] % 2 ] + = 1
# Return the count of pairs
return (A[ 0 ] * B[ 0 ] + A[ 1 ] * B[ 1 ])
# Driver code P = [ 1 , 3 , 2 ]
Q = [ 3 , 0 ]
N = len (P)
M = len (Q)
print (countPairs(P, Q, N, M))
# This code is contributed by mohit kumar 29 |
// C# program to Number of pairs of lines // having integer intersection points using System;
class GFG
{ // Count number of pairs of lines
// having integer intersection point
static int countPairs( int []P, int []Q,
int N, int M)
{
// Initialize arrays to store counts
int []A = new int [2];
int []B = new int [2];
// Count number of odd and even Pi
for ( int i = 0; i < N; i++)
A[P[i] % 2]++;
// Count number of odd and even Qi
for ( int i = 0; i < M; i++)
B[Q[i] % 2]++;
// Return the count of pairs
return (A[0] * B[0] + A[1] * B[1]);
}
// Driver code
public static void Main()
{
int []P = { 1, 3, 2 };
int []Q = { 3, 0 };
int N = P.Length;
int M = Q.Length;
Console.Write(countPairs(P, Q, N, M));
}
} // This code is contributed by AnkitRai01 |
<script> // Javascript program to Number of // pairs of lines having integer // intersection points // Count number of pairs of lines // having integer intersection point function countPairs(P, Q, N, M)
{ // Initialize arrays to store counts
var A = [0, 0], B = [0, 0];
// Count number of odd and even Pi
for ( var i = 0; i < N; i++)
A[P[i] % 2]++;
// Count number of odd and even Qi
for ( var i = 0; i < M; i++)
B[Q[i] % 2]++;
// Return the count of pairs
return (A[0] * B[0] + A[1] * B[1]);
} // Driver code var P = [ 1, 3, 2 ], Q = [ 3, 0 ];
var N = P.length;
var M = Q.length;
document.write(countPairs(P, Q, N, M)); // This code is contributed by rrrtnx </script> |
3
Time Complexity: O(P + Q)
Auxiliary Space: O(1)