Description
“年”是一个生活在海洋深处的怪物。每年,它都出现在陆地上,吞噬牲畜甚至是人。为了让怪物离开,人们用红色,光线和爆炸的声音填满他们的村庄,所有这些都吓跑了怪物。
小汤米有 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 9 到 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
Hint
在第一个例子中,Tommy将隐藏20,Banban将从Tommy选择18,从他自己选择14。
在第二个例子中,Tommy将隐藏3,Banban将从Tommy中选择2,从他自己选择1。
解题思路:我一直都理解错了这道题的意思,开始以为Tommy不会看到banban手中的灯笼的亮度,所以为了避免出现更大按我的理解tommy应该是隐藏最大的数,可这道题真正的意思是tommy是可以看到banban的灯笼亮度的,而且考虑到数据量很小所以可以直接采用暴力的方法,先找到二者能够组成的最大亮度,记录下此时tommy提供的亮度,在查找一次排除tommy的标记的亮度后最大的亮度就是所求的亮度。
1 #include <iostream> 2 #include <cstdio> 3 #include <climits> 4 using namespace std; 5 int main() 6 { 7 long long int a[60],b[60],maxn; 8 int i,j,n,m,k; 9 scanf("%d%d",&n,&m); 10 for(i=0; i<n; i++) 11 { 12 scanf("%lld",&a[i]); 13 } 14 for(i=0; i<m; i++) 15 { 16 scanf("%lld",&b[i]); 17 } 18 maxn=LLONG_MIN; 19 for(i=0; i<n; i++) 20 { 21 for(j=0; j<m; j++) 22 { 23 if(a[i]*b[j]>maxn) 24 { 25 maxn=a[i]*b[j]; 26 k=i; 27 } 28 } 29 } 30 maxn=LLONG_MIN; 31 for(i=0; i<n; i++) 32 { 33 if(i==k) 34 { 35 continue; 36 } 37 38 for(j=0; j<m; j++) 39 { 40 if(a[i]*b[j]>maxn) 41 { 42 maxn=a[i]*b[j]; 43 } 44 } 45 } 46 printf("%lld ",maxn); 47 return 0; 48 }