### 传送门
题意
从自己地方去掉一个数,对方从两堆数中各选一个数相乘,求乘积最大。注意有负数,可以先去掉最大最小的都试一下,然后从计算如何能使对方获得的最大乘积最小。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <cstdio> #include <iostream> #include <algorithm> typedef __int64 ll; using namespace std; int n,m; ll a[55],b[55]; ll s1,s2,ans=0; int main() { cin >> n >> m; for (int i=0;i<n;i++) cin >> a[i]; for (int i=0;i<m;i++) cin >> b[i]; sort(a,a+n); sort(b,b+m); s1=max(max(a[1]*b[0],a[n-1]*b[m-1]),max(a[1]*b[m-1],a[n-1]*b[0])); s2=max(max(a[0]*b[0],a[n-2]*b[m-1]),max(a[0]*b[m-1],a[n-2]*b[0])); ans=min(s1,s2); cout << ans; return 0; }
|