Número de pares de líneas que tienen puntos de intersección enteros

Dadas dos arrays de enteros P[] y Q[] , donde p i y q j para cada 0 <= i < tamaño (P) y 0 <= j < tamaño (Q) representan las ecuaciones de línea x – y = -p i y x + y = qj respectivamente. La tarea es encontrar el número de pares de P[] y Q[] que tienen puntos de intersección enteros.

Ejemplos: 

Entrada: P[] = {1, 3, 2}, Q[] = {3, 0} 
Salida:
Los pares de líneas (p, q) que tienen puntos de intersección enteros son (1, 3), (2, 0) ) y (3, 3). Aquí p es el parámetro de línea de P[] y q es el de Q[].

Entrada: P[] = {1, 4, 3, 2}, Q[] = {3, 6, 10, 11} 
Salida:
 

Acercarse:  

  • El problema se puede resolver fácilmente resolviendo las dos ecuaciones y analizando la condición de los puntos de intersección de enteros.
  • Las dos ecuaciones son x – y = -p y x + y = q .
  • Resolviendo para x e y obtenemos, x = (qp)/2 y y = (p+q)/2 .
  • Está claro que el punto de intersección de enteros es posible si y solo si p y q tienen la misma paridad.
  • Sean p 0 y p 1 el número de pares e impares p i respectivamente.
  • De manera similar, q 0 y q 1 para el número de pares e impares q i respectivamente.
  • Por lo tanto, las respuestas requeridas son p 0 * q 0 + p 1 * q 1 .

A continuación se muestra la implementación del enfoque anterior: 

C++

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

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

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

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

Javascript

<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>
Producción: 

3

 

Complejidad del Tiempo: O(P + Q)

Espacio Auxiliar: O(1)
 

Publicación traducida automáticamente

Artículo escrito por rupesh_rao y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *