A Compatible Pair CodeForces - 934A

在一个村庄里,为了抵御每年出现的年兽,村民使用红灯笼来驱赶它。小Tommy和大Banban拥有不同亮度的灯笼,他们必须选择一对灯笼,使亮度的乘积尽可能符合他们的目标。

Nian is a monster which lives deep in the oceans. Once a year, it shows up on the land, devouring livestock and even people. In order to keep the monster away, people fill their villages with red colour, light, and cracking noise, all of which frighten the monster out of coming.

Little Tommy has n lanterns and Big Banban has m lanterns. Tommy’s lanterns have brightness a1, a2, …, an, and Banban’s have brightness b1, b2, …, bm respectively.

Tommy intends to hide one of his lanterns, then Banban picks one of Tommy’s non-hidden lanterns and one of his own lanterns to form a pair. The pair’s brightness will be the product of the brightness of two lanterns.

Tommy wants to make the product as small as possible, while Banban tries to make it as large as possible.

You are asked to find the brightness of the chosen pair if both of them choose optimally.

Input
The first line contains two space-separated integers n and m (2 ≤ n, m ≤ 50).

The second line contains n space-separated integers a1, a2, …, an.

The third line contains m space-separated integers b1, b2, …, bm.

All the integers range from  - 109 to 109.

Output
Print a single integer — the brightness of the chosen pair.

Examples
Input
2 2
20 18
2 14
Output
252
Input
5 3
-1 0 1 2 3
-1 0 1
Output
2
Note
In the first example, Tommy will hide 20 and Banban will choose 18 from Tommy and 14 from himself.

In the second example, Tommy will hide 3 and Banban will choose 2 from Tommy and 1 from himself.

题意: A中有n个数,B中有m个数。A中抽一个数与B中抽一个数相乘。A可以去掉一个数。A想让结果最小,B想让结果最大。结果是多少。
思路: 结果一定是A中最大值或最小值 与 B中最大值最小值的乘积,讨论最小值是因为负数。

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int maxn = 55;
typedef long long ll;
ll a[maxn],b[maxn];

int main()
{
    int n,m;scanf("%d%d",&n,&m);
    for(int i = 1;i <= n;i++)scanf("%lld",&a[i]);
    for(int i = 1;i <= m;i++)scanf("%lld",&b[i]);
    sort(a + 1,a + 1 + n);sort(b + 1,b + 1 + m);
    
    ll tmp1 = max(a[n - 1] * b[m],a[n - 1] * b[1]);
    ll ctmp1 = max(a[1] * b[m],a[1] * b[1]);
    tmp1 = max(tmp1,ctmp1);
    
    ll tmp2 = max(a[2] * b[m],a[2] * b[1]);
    ll ctmp2 = max(a[n] * b[m],a[n] * b[1]);
    tmp2 = max(tmp2,ctmp2);
    
    ll ans = min(tmp1,tmp2);
    printf("%lld\n",ans);
    return 0;
}

### 关于 Codeforces Problem 1802A 目前提供的引用内容并未涉及 Codeforces 编号为 1802A 的题目详情或解决方案[^1]。然而,基于常见的竞赛编程问题模式以及可能的解决方法,可以推测该类题目通常围绕算法设计、数据结构应用或者特定技巧展开。 如果假设此题属于典型的算法挑战之一,则可以从以下几个方面入手分析: #### 可能的方向一:字符串处理 许多入门级到中级难度的问题会考察字符串操作能力。例如判断子串是否存在、统计字符频率或是执行某种转换逻辑等。以下是 Python 中实现的一个简单例子用于演示如何高效地比较两个字符串是否相匹配: ```python def are_strings_equal(s1, s2): if len(s1) != len(s2): return False for i in range(len(s1)): if s1[i] != s2[i]: return False return True ``` #### 方向二:数组与列表的操作 另一常见主题是对整数序列进行各种形式上的变换或者是查询最值等问题。下面给出一段 C++ 程序片段来展示快速寻找最大元素位置的方法: ```cpp #include <bits/stdc++.h> using namespace std; int main(){ int n; cin >> n; vector<int> a(n); for(auto &x : a){ cin>>x; } auto max_it = max_element(a.begin(),a.end()); cout << distance(a.begin(),max_it)+1; // 输出索引加一作为答案 } ``` 由于具体描述缺失,在这里仅提供通用框架供参考。对于确切解答还需要访问实际页面获取更多信息后再做进一步探讨[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值