Related Articles

Related Articles

Number of pairs of lines having integer intersection points
  • Last Updated : 27 Jan, 2020

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:

CPP

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Output:

3

Time Complexity: O(P + Q)

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
Recommended Articles
Page :