【PAT甲级】1037 Magic Coupon (25 分)

题意:

输入一个正整数N(<=1e5),接下来输入N个整数。再输入一个正整数M(<=1e5),接下来输入M个整数。每次可以从两组数中各取一个,求最大的两个数的乘积的和。

AAAAAccepted code:

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 long long a[100007],b[100007];
 5 long long c[100007],d[100007];
 6 int cnta,cntb,cntc,cntd;
 7 int main(){
 8     int n,m;
 9     cin>>n;
10     long long x;
11     for(int i=1;i<=n;++i){
12         cin>>x;
13         if(x>0)
14             a[++cnta]=x;
15         else if(x<0)
16             b[++cntb]=x;
17     }
18     cin>>m;
19     for(int i=1;i<=m;++i){
20         cin>>x;
21         if(x>0)
22             c[++cntc]=x;
23         else if(x<0)
24             d[++cntd]=x;
25     }
26     long long ans=0;
27     sort(a+1,a+1+cnta);
28     sort(b+1,b+1+cntb);
29     sort(c+1,c+1+cntc);
30     sort(d+1,d+1+cntd);
31     for(int i=1;i<=min(cntb,cntd);++i)
32         ans+=b[i]*d[i];
33     for(int i=cnta,j=cntc;i&&j;--i,--j)
34         ans+=a[i]*c[j];
35     cout<<ans;
36     return 0;
37 }
保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
原文地址:https://www.cnblogs.com/ldudxy/p/11551788.html