//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 }