第一遍刷pat
测试点提示
测试点1:负数区长度相等
-1 1
-1 1 2
测试点4:主要考察每个数字只能用一次
我的憨憨程序
贪心算法
#include<bits/stdc++.h>
using namespace std;
int main()
{
int nc,np;
int ans=0;
int coupon[100010]={0},product[100010]={0};
scanf("%d",&nc);
for(int i=0;i<nc;i++)
scanf("%d",&coupon[i]);
scanf("%d",&np);
for(int i=0;i<np;i++)
scanf("%d",&product[i]);
sort(coupon,coupon+nc);
sort(product,product+np);
for(int i=0;i<nc&&i<np;i++)
{
//if(coupon[i]*product[i]<=0) bug点:-1 1/-1 1 2
if(coupon[i]>=0||product[i]>=0)
break;
ans+=coupon[i]*product[i];
coupon[i]=product[i]=0;
}
for(int i=nc-1,j=np-1;i>=0&&j>=0;i--,j--)
{
//if(coupon[i]*product[j]<=0)
if(coupon[i]<=0||product[j]<=0)
break;
ans+=coupon[i]*product[j];
}
printf("%d\n",ans);
}