//sort(a+i,a+j)------->a[i]到a[j-1]被排序。
1 #include <iostream>
2 #include <algorithm>
3
4 using namespace std;
5 long int pos[1000001], neg[1000001],price[1000001];
6 long int N, M;
7 long int k1 = -1, k2 = -1;
8 long int p1 = -1, p2 = -1;
9 bool cmp_less(long int a,long int b)
10 {
11 return a > b;
12 }
13 bool cmp_greater(long int a, long int b)
14 {
15 return a < b;
16 }
17 int main()
18 {
19 cin >> N;
20 for (long int i = 0; i < N; i++)
21 {
22 long int temp; cin >> temp;
23 if (temp > 0)
24 {
25 pos[++k1] = temp;
26 }
27 else
28 {
29 neg[++k2] = temp;
30 }
31 }
32 cin >> M;
33 for (long int i = 0; i < M; i++)
34 {
35 cin >> price[i];
36 }
37 sort(pos, pos + N,cmp_less);
38 sort(neg, neg + N, cmp_greater);
39 sort(price, price + M, cmp_less);
40 long int sum = 0;
41 long int p = M - 1;
42 long int flag = 0;
43
44 for (long int i = 0; i < M; i++)
45 {
46 if (price[i] < 0 && flag == 0)
47 {
48 sort(price + i, price + M, cmp_greater);
49 flag = 1;
50 }
51 if (price[i] > 0)
52 {
53 if (k1 != p1)
54 {
55 sum += price[i] * pos[++p1];
56 }
57 }
58 if (price[i] < 0)
59 {
60 if (k2 != p2)
61 {
62 sum += price[i] * neg[++p2];
63 }
64 }
65 }
66 cout << sum;
67 return 0;
68 }