查找所选灯笼数(查找第二大)

“年”是一个生活在海洋深处的怪物。每年,它都出现在陆地上,吞噬牲畜甚至是人。为了让怪物离开,人们用红色,光线和爆炸的声音填满他们的村庄,所有这些都吓跑了怪物。
 
小汤米有 n 个灯笼,大班班有灯笼。汤米的灯具有亮度a1,a2,...,an,而Banban的亮度分别为亮度b1,b2,...,bm。
 
汤米打算藏一个灯笼,然后班班选择汤米的一个没藏起来的灯笼和一个他自己的灯笼组成一对。这对灯笼的亮度将是两个灯笼亮度的乘积。
 
Tommy想让乘积尽可能小,而Banban试图让乘积尽可能大。

Input

第一行包含两个整数n和m(2≤n,m≤50)。
 
第二行包含n个整数a1,a2,...,an。
 
第三行包含m个整数b1,b2,...,bm。
 
整数范围从-10 到 10 9

Output

输出单个整数——所选灯笼对的亮度。

Sample Input

Input
2 2
20 18
2 14
Output
252
Input
5 3
-1 0 1 2 3
-1 0 1
Output
2

Sample Output

Hint

在第一个例子中,Tommy将隐藏20,Banban将从Tommy选择18,从他自己选择14。
 
在第二个例子中,Tommy将隐藏3,Banban将从Tommy中选择2,从他自己选择1。 

思路:

首先记录下来他们之间最大的乘积,记录下来Tommy需要隐藏哪一个数字,然后在算他们之间的最大值

代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cvector>
using namespace std;

int main()
{
    long long int n,m,i,j,a[51],b[51],maxx=-9e18,maxx1=-9e18,p=0,q=0;
    scanf("%lld%lld",&n,&m);
    for(i=0; i<n; i++)
        scanf("%lld",&a[i]);
    for(i=0; i<m; i++)
        scanf("%lld",&b[i]);
    for(i=0; i<n; i++)
    {
        for(j=0; j<m; j++)
        {
            if(a[i]*b[j]>maxx)
            {
                maxx=a[i]*b[j];
                p=i;
                q=j;
            }
        }
    }
    for(i=0; i<n; i++)
    {
        for(j=0; j<m; j++)
        {
            if(i==p)
                continue;


            if(a[i]*b[j]>maxx1)
            {
                maxx1=a[i]*b[j];
            }
        }
    }
    printf("%lld\n",maxx1);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38984851/article/details/81064963