A1037

给两个序列,一一对应相乘,求最大和。

0不算数,输入时按正负共分为4个数组。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<iostream>
 4 using namespace std;
 5 const int maxn=100010;
 6 int coupon1[maxn],coupon2[maxn];
 7 int product1[maxn],product2[maxn];
 8 bool cmp(int a,int b){
 9     return a>b;
10 }
11 int main(){
12     int n,m,c1=0,c2=0,p1=0,p2=0;
13     long long cx,px,ans=0;
14     scanf("%d", &n);
15     for(int i=0;i<n;i++){
16         scanf("%lld",&cx);
17         if(cx>=0) {
18             coupon1[c1++]=cx;
19         }
20         else {
21             coupon2[c2++]=cx;
22         }
23     }
24     scanf("%d",&m);
25     for(int i=0;i<m;i++){
26         scanf("%lld",&px);
27         if(px>=0) {
28             product1[p1++]=px;
29         }
30         else {
31             product2[p2++]=px;
32         }
33     }
34     sort(coupon1,coupon1+c1,cmp);
35     sort(coupon2,coupon2+c2);
36     sort(product1,product1+p1,cmp);
37     sort(product2,product2+p2);
38     for(int i=0;i<c1;i++){
39         ans+=coupon1[i]*product1[i];
40     }
41     for(int i=0;i<c2;i++){
42         ans+=coupon2[i]*product2[i];
43     }
44     printf("%lld",ans);
45     return 0;
46 }
原文地址:https://www.cnblogs.com/Lynn-2019/p/10391438.html