给定一个整数数组 A,其包含 n 个正整数 a1,a2,…,an 以及一个整数数组 B,其包含 m 个正整数 b1,b2,…,bm。
请从数组 A 中挑选一个元素 a 并从数组 B 中挑选一个元素 b,使得 a+b 既不包含于 A 也不包含于 B。
例如,如果 A=[2,1,7] 而 B=[1,3,4],则可以从 A 中选取 1,从 B 中选取 4,这样得到的数字 1+4=5 既不在 A 中,也不在 B 中。
但是,我们不能从 A 中选取 2,从 B 中选取 1,因为得到的数字 2+1=3 包含于 B。
可以证明这样的数对一定存在,如果答案不唯一则输出任意合理答案均可。
输入格式
第一行包含整数 n。第二行包含 n 个整数 a1,…,an。
第三行包含整数 m。
第四行包含 m 个整数 b1,…,bm。
输出格式
共一行,输出 a 和 b,中间用空格隔开。数据范围
对于 30% 的数据,1≤n,m≤10
对于 100% 的数据,1≤n,m≤100,1≤ai,bi≤200
一看到题目就想到哈希,所以看代码
#include <iostream>
#include <unordered_set>
using namespace std;
const int N = 110;
int n, m;
int a[N], b[N];
unordered_set<int> S;
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i], S.insert(a[i]);
cin >> m;
for (int i = 0; i < m; i++) cin >> b[i], S.insert(b[i]);
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (!S.count(a[i] + b[j])) {
cout << a[i] << " " << b[j] << endl;
return 0;
}
return 0;
}
然后我又想了想a和b数组最大值之和一定不存在于a或b数组任意一个元素
所以:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, x = 0, y = 0, a;
scanf("%d", &n);
for (int i = 1;i <= n; i++) scanf("%d", &a), x = max(x, a);
scanf("%d", &n);
for (int i = 1;i <= n; i++) scanf("%d", &a), y = max(y, a);
printf("%d %d", x, y);
return 0;
}
欢迎评论点赞