题目描述
给定两个数组a,b,若a[i] == b[j] 则称 [i, j] 为一个二元组,求在给定的两个数组中,二元组的个数。
输入描述
第一行输入 m
第二行输入m个数,表示第一个数组
第三行输入 n
第四行输入n个数,表示第二个数组
输出描述
二元组个数。
用例
输入 | 4 1 2 3 4 1 1 |
输出 | 1 |
说明 | 二元组个数为 1个 |
输入 | 6 1 1 2 2 4 5 3 2 2 4 |
输出 | 5 |
说明 | 二元组个数为 5 个。 |
问题解析
题目要求找到两个数组中相等元素的对数。具体来说,给定两个数组 a
和 b
,需要找出所有满足 a[i] == b[j]
的二元组 [i, j]
的数量。
输入描述
- 第一行输入一个整数
m
,表示第一个数组的大小。 - 第二行输入
m
个整数,表示第一个数组a
。 - 第三行输入一个整数
n
,表示第二个数组的大小。 - 第四行输入
n
个整数,表示第二个数组b
。
输出描述
输出二元组的个数。
实现思路
- 读取输入:读取两个数组
a
和b
。 - 建立字典:使用一个字典统计第一个数组中每个元素的出现次数。
- 遍历第二个数组:检查每个元素在第一个数组中出现的次数,并累加到二元组的数量中。
- 输出结果:输出二元组的数量。
实现步骤
- 读取输入:使用
cin
读取输入的两个数组。 - 构建字典:遍历数组
a
,统计每个元素的出现次数。 - 统计二元组:遍历数组
b
,根据字典统计符合条件的二元组数量。 - 输出结果。
C++ 实现
以下是实现该逻辑的 C++ 代码:
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main() {
int m, n;
cin >> m;
vector<int> a(m);
for (int i = 0; i < m; ++i) {
cin >> a[i];
}
cin >> n;
vector<int> b(n);
for (int i = 0; i < n; ++i) {
cin >> b[i];
}
unordered_map<int, int> count_map;
for (int i = 0; i < m; ++i) {
count_map[a[i]]++;
}
int pair_count = 0;
for (int j = 0; j < n; ++j) {
if (count_map.find(b[j]) != count_map.end()) {
pair_count += count_map[b[j]];
}
}
cout << pair_count << endl;
return 0;
}
代码说明
- 输入处理:使用
cin
读取数组的大小和元素。 - 构建字典:使用
unordered_map
统计第一个数组中每个元素的出现次数。 - 统计二元组:遍历第二个数组,检查每个元素在第一个数组中的出现次数,并累加到二元组数量中。
- 输出结果:输出二元组数量。
输入输出示例
-
输入:
4
1 2 3 4
1
1
- 输出:
1
输入:
6
1 1 2 2 4 5
3
2 2 4
输出:
5
该程序能够根据输入的两个数组,正确计算并输出相等元素的二元组数量。
Python 实现
def main():
import sys
input = sys.stdin.read
data = input().split()
m = int(data[0])
a = list(map(int, data[1:m+1]))
n = int(data[m+1])
b = list(map(int, data[m+2:m+2+n]))
count_map = {}
for num in a:
if num in count_map:
count_map[num] += 1
else:
count_map[num] = 1
pair_count = 0
for num in b:
if num in count_map:
pair_count += count_map[num]
print(pair_count)
if __name__ == "__main__":
main()
代码说明
- 输入处理:使用
input().split()
读取所有输入数据,并拆分成数组a
和b
。 - 构建字典:使用
count_map
字典统计第一个数组a
中每个元素的出现次数。 - 统计二元组:遍历第二个数组
b
,检查每个元素在第一个数组a
中的出现次数,并累加到二元组数量中。 - 输出结果:输出二元组数量。
使用示例
运行程序时,将按照下述步骤操作:
- 输入第一个数组的大小
m
。 - 输入第一个数组
a
的元素。 - 输入第二个数组的大小
n
。 - 输入第二个数组
b
的元素。 - 程序将输出二元组的数量。
示例输入:
4
1 2 3 4
1
1
示例输出:
1
示例输入:
6
1 1 2 2 4 5
3
2 2 4
示例输出:
5
该程序能够根据输入的两个数组,正确计算并输出相等元素的二元组数量。