这题目是真的坑 用暴力的话,每一种情况都存到数组里,再排序, 但是,冒泡时间超限,希尔也超限,正面杠的sort也会超限,要改一点点,,,,,, 其实不用排序也可以做出来,刚开始就是在弄排序然后疯狂超限
#include<stdio.h>
#define ll long long
int main()
{
ll i,j,n,m;
ll a[1000],b[1000];
while(~scanf("%lld %lld",&n,&m))
{
ll y=0;
for(i=0;i<n;i++){
scanf("%lld",&a[i]);
}
for(i=0;i<m;i++){
scanf("%lld",&b[i]);
}
int t;
ll max=-1e18;//负的数开大一点,连-1e17都是错误的
for(i=0;i<n;i++)
for(j=0;j<m;j++){
if(a[i]*b[j]>max){
max=a[i]*b[j];
t=i;
}
}
max=-1e18;
for(i=0;i<n;i++)
for(j=0;j<m;j++){
if(i==t)continue;//代表被隐藏的那个数
if(a[i]*b[j]>max){
max=a[i]*b[j];
}
}
printf("%lld\n",max);
}
return 0;
}
以上是AC的
以下就是超限的错误例子…
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ll i,j,n,m;
ll a[1000],b[1000],c[1000];
while(~scanf("%lld %lld",&n,&m))
{
ll y=0;
for(i=0;i<n;i++){
scanf("%lld",&a[i]);
}
for(i=0;i<m;i++){
scanf("%lld",&b[i]);
}
int k=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
c[k++]=a[i]*b[j];
}
sort(c,c+k);
printf("%lld\n",c[k-2]);
}
return 0;
}