给定两个整数数组P[]和Q[] ,其中p i和q j对于每个0 <= i < size(P)和0 <= j < size(Q)表示线方程x – y = -p i和x + y = q j分别。任务是从具有整数交点的P[]和Q[]中找到对的数量。
例子:
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
方法:
- 通过求解两个方程并分析整数交点的条件,可以轻松解决该问题。
- 这两个方程是x – y = -p和x + y = q 。
- 求解x和y我们得到, x = (qp)/2和y = (p+q)/2 。
- 很明显,当且仅当p和q具有相同的奇偶性时,整数交点是可能的。
- 设p 0和p 1分别是偶数和奇数p i 。
- 类似地, q 0和q 1 分别为偶数和奇数q i 。
- 因此所需的答案是p 0 * q 0 + p 1 * q 1 。
下面是上述方法的实现:
C++
// C++ program to Number of pairs of lines
// having integer intersection points
#include
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
输出:
3
时间复杂度: O(P + Q)