1037 Magic Coupon (25 分)

1037 Magic Coupon (25 分)

The magic shop in Mars is offering some magic coupons. Each coupon has an integer N printed on it, meaning that when you use this coupon with a product, you may get N times the value of that product back! What is more, the shop also offers some bonus product for free. However, if you apply a coupon with a positive N to this bonus product, you will have to pay the shop N times the value of the bonus product... but hey, magically, they have some coupons with negative N's!

For example, given a set of coupons { 1 2 4 −1 }, and a set of product values { 7 6 −2 −3 } (in Mars dollars M$) where a negative value corresponds to a bonus product. You can apply coupon 3 (with N being 4) to product 1 (with value M$7) to get M$28 back; coupon 2 to product 2 to get M$12 back; and coupon 4 to product 4 to get M$3 back. On the other hand, if you apply coupon 3 to product 4, you will have to pay M$12 to the shop.

Each coupon and each product may be selected at most once. Your task is to get as much money back as possible.

Input Specification:

Each input file contains one test case. For each case, the first line contains the number of coupons N​C​​, followed by a line with N​C​​ coupon integers. Then the next line contains the number of products N​P​​, followed by a line with N​P​​product values. Here 1≤N​C​​,N​P​​≤10​5​​, and it is guaranteed that all the numbers will not exceed 2​30​​.

Output Specification:

For each test case, simply print in a line the maximum amount of money you can get back.

Sample Input:

4
1 2 4 -1
4
7 6 -2 -3

Sample Output:

43

分析:1、从大到小排序,再将对应位置上乘积大于0的部分加起来。      2、从小到大排序,再将对应位置上乘积大于0的部分加起来。要注意过程中要控制两个数均为正数或负数,不然回重复加。。。
 /**
 * Copyright(c)
 * All rights reserved.
 * Author : Mered1th
 * Date : 2019-02-26-00.04.11
 * Description : A1037
 */
 #include<cstdio>
 #include<cstring>
 #include<iostream>
 #include<cmath>
 #include<algorithm>
 #include<string>
 #include<unordered_set>
 #include<map>
 #include<vector>
 #include<set>
 using namespace std;
 ;
 int a[maxn],b[maxn];
 bool cmp1(int a,int b){
     return a>b;
 }
 bool cmp2(int a,int b){
     return a<b;
 }
 int main(){
 #ifdef ONLINE_JUDGE
 #else
     freopen("1.txt", "r", stdin);
 #endif
     int n1,n2;
     scanf("%d",&n1);
     ;i<n1;i++){
         scanf("%d",&a[i]);
     }
     scanf("%d",&n2);
     ;i<n2;i++){
         scanf("%d",&b[i]);
     }
     ;
     sort(a,a+n1,cmp1);
     sort(b,b+n2,cmp1);
     ;i<min(n1,n2);i++){
         &&a[i]>=&&b[i]>){
             ans+=a[i]*b[i];
         }
         else break;
     }
     sort(a,a+n1,cmp2);
     sort(b,b+n2,cmp2);
     ;i<min(n1,n2);i++){
         &&a[i]<&&b[i]<){
             ans+=a[i]*b[i];
         }
         else break;
     }
     cout<<ans;
     ;
 }
上一篇:[独孤九剑]Oracle知识点梳理(三)导入、导出


下一篇:Atitit。sql2016标准化的规划方案 v3 q2a