Content
有两个数列 \(A\) 和 \(B\),\(A\) 数列里面有 \(n\) 个元素,\(B\) 数列里面有 \(m\) 个元素,现在请从 \(A\) 数列中删除一个数,使得 \(A\) 数列中剩下的任意一个元素与 \(B\) 数列中任意一个元素相乘得到的所有 \(m(n-1)\) 个值的最大值最小,求出这个最小值。
数据范围:\(1\leqslant n,m\leqslant 50,-10^9\leqslant A_i,B_i\leqslant 10^9\)。
Solution
数据范围这么小,我们为什么不直接枚举呢?
首先枚举在 \(A\) 数列中删除的数,然后枚举所有相乘得到的 \(m(n-1)\) 个值,求得最大值,再取最小,最后直接输出就好了。
提醒:这道题目相乘得到的结果可能很大,需要开 \(\texttt{long long}\)!
Code
int n, m;
ll a[57], b[57], ans = 0x3f3f3f3f3f3f3f3f;
int main() {
getint(n), getint(m);
_for(i, 1, n) getll(a[i]);
_for(i, 1, m) getll(b[i]);
_for(k, 1, n) {
ll maxi = -0x3f3f3f3f3f3f3f3f;
_for(i, 1, n)
_for(j, 1, m)
if(i != k)
maxi = max(maxi, a[i] * b[j]);
ans = min(ans, maxi);
}
writell(ans);
return 0;
}