fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef unsigned long long ull;
  5. typedef long double ld;
  6. #define REP(i, n) for (int i = 0; i < (n); i++)
  7.  
  8. const long double EPS = 1e-10;
  9. const long long INF = 1e18;
  10. const long double PI = acos(-1.0L);
  11.  
  12.  
  13. ll gcd(ll a, ll b){ if(b==0){ return a; } return gcd(b , a%b); }
  14.  
  15.  
  16. int main() {
  17. int cnt = 1;
  18. int r,g,b;
  19. cin>>r>>g>>b;
  20. vector<int> rr(r),gg(g),bb(b);
  21. REP(i,r){
  22. cin>>rr[i];
  23. }
  24. REP(i,g){
  25. cin>>gg[i];
  26. }
  27. REP(i,b){
  28. cin>>bb[i];
  29. }
  30.  
  31. sort(rr.begin(),rr.end(), greater<int>());
  32. sort(gg.begin(),gg.end(), greater<int>());
  33. sort(bb.begin(),bb.end(), greater<int>());
  34.  
  35. int min_last_elem = min(rr[r-1],min(gg[g-1],bb[b-1]));
  36.  
  37. if( (r+g+b)&1){
  38. if(rr[r-1]== min_last_elem){
  39. rr.pop_back();
  40. r--;
  41. }
  42. else if(gg[g-1] == min_last_elem){
  43. gg.pop_back();
  44. g--;
  45. }
  46. else{
  47. bb.pop_back();
  48. b--;
  49. }
  50. }
  51.  
  52. // REP(i,r){
  53. // cout<<rr[i]<<" ";
  54. // }cout<<"\n";
  55. // REP(i,g){
  56. // cout<<gg[i]<<" ";
  57. // }cout<<"\n";
  58. // REP(i,b){
  59. // cout<<bb[i]<<" ";
  60. // }cout<<"\n";
  61.  
  62.  
  63. ll sum = 0;
  64. int ii= 0,jj=0,kk=0;
  65. while( (ii< r && jj< g) || (ii< r && kk < b) || (jj < g && kk < b) ){
  66. int greatest = 0, secondGreatest = 0;
  67. greatest = std::max(rr[ii], secondGreatest = std::max(gg[jj], bb[kk]));
  68. secondGreatest = std::min(std::max(std::min(gg[jj], bb[kk]), rr[ii]), secondGreatest);
  69.  
  70. sum += secondGreatest * greatest;
  71. if(greatest == rr[ii] ){
  72. ii++;
  73. if(secondGreatest == gg[jj]){
  74. jj++;
  75. }
  76. else if(secondGreatest == bb[kk]){
  77. kk++;
  78. }
  79. }
  80. else if(greatest == gg[jj] ){
  81. jj++;
  82. if(secondGreatest == rr[ii]){
  83. ii++;
  84. }
  85. else if(secondGreatest == bb[kk]){
  86. kk++;
  87. }
  88. }
  89. else if(greatest == bb[kk] ){
  90. kk++;
  91. if(secondGreatest == rr[ii]){
  92. ii++;
  93. }
  94. else if(secondGreatest == gg[jj]){
  95. jj++;
  96. }
  97. }
  98.  
  99.  
  100. }
  101.  
  102.  
  103. cout<<sum<<"\n";
  104.  
  105.  
  106.  
  107.  
  108.  
  109. return 0;
  110. }
  111.  
  112.  
  113.  
  114.  
  115.  
Success #stdin #stdout 0s 4636KB
stdin
4 2 2
10 10 10 10
11 11
11 11
stdout
242