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;
}
原文地址:https://www.cnblogs.com/fxh0707/p/14414017.html