题目说了那么多,就是给你两个序列,分别选取元素进行一对一相乘,求得到的最大乘积。
将两个序列的正和负数分开,排个序,然后分别将正1和正2前面的相乘,负1和负2前面的相乘,累加和即可。
#include#include #include #include #include #include using namespace std;const int maxn=100000+5;int coupon1[maxn];int c1;int coupon2[maxn];int c2;int product1[maxn];int product2[maxn];int p1,p2;bool cmp(int a,int b){ return a>b;}int main(){ int nc,np; long long tmp; c1=c2=p1=p2=0; scanf("%d",&nc); for(int i=0;i =0) coupon1[c1++]=tmp; else coupon2[c2++]=tmp; } scanf("%d",&np); for(int i=0;i =0) product1[p1++]=tmp; else product2[p2++]=tmp; } long long ans=0; sort(coupon1,coupon1+c1,cmp); sort(product1,product1+p1,cmp); sort(coupon2,coupon2+c2); sort(product2,product2+p2); int min1=min(c1,p1); for(int i=0;i