1037 Magic Coupon (25 分)
水题~。
魔鬼变量名。
vector<int> positive_coupon,negative_coupon;
vector<int> positive_product,negative_product;
int nc,np;
int main()
{
cin>>nc;
for(int i=0;i<nc;i++)
{
int x;
cin>>x;
if(x > 0) positive_coupon.pb(x);
else negative_coupon.pb(x);
}
sort(positive_coupon.begin(),positive_coupon.end(),greater<int>());
sort(negative_coupon.begin(),negative_coupon.end());
cin>>np;
for(int i=0;i<np;i++)
{
int x;
cin>>x;
if(x > 0) positive_product.pb(x);
else negative_product.pb(x);
}
sort(positive_product.begin(),positive_product.end(),greater<int>());
sort(negative_product.begin(),negative_product.end());
int res=0;
int cnt=min(positive_coupon.size(),positive_product.size());
for(int i=0;i<cnt;i++)
res+=positive_coupon[i]*positive_product[i];
cnt=min(negative_coupon.size(),negative_product.size());
for(int i=0;i<cnt;i++)
res+=negative_coupon[i]*negative_product[i];
cout<<res<<endl;
//system("pause");
return 0;
}
咳咳,根据晴神代码作了简化:
const int N=1e5+10;
int coupon[N];
int product[N];
int nc,np;
int main()
{
cin>>nc;
for(int i=0;i<nc;i++) cin>>coupon[i];
sort(coupon,coupon+nc);
cin>>np;
for(int i=0;i<np;i++) cin>>product[i];
sort(product,product+np);
int res=0;
int i=0,j=0;
while(i<nc && j<np && coupon[i] < 0 && product[j] < 0)
{
res+=coupon[i]*product[j];
i++,j++;
}
i=nc-1,j=np-1;
while(i>=0 && j>=0 && coupon[i] > 0 && product[j] > 0)
{
res+=coupon[i]*product[j];
i--,j--;
}
cout<<res<<endl;
//system("pause");
return 0;
}