fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <algorithm>
  5. using namespace std;
  6. long long N,A,B,C;
  7. vector <long long> num;
  8. map <string, long long> mp,mpCombine;
  9.  
  10. void solve1 (vector <long long>& v){
  11. for (auto x : v){
  12. long long arr[3]; // [0] = a, [1] = b, [2] = c,
  13. arr [0] = (A - (x % A)) % A;
  14. cout << "debug A : " << arr [0] << endl;
  15. arr [1] = (B - (x % B)) % B;
  16. cout << "debug B : " << arr [1] << endl;
  17. arr [2] = (C - (x % C)) % C ;
  18. cout << "debug C : " << arr [2] << endl;
  19. if (arr [0] == arr [1] == arr [2]) mp.at("abc") = min(mp.at("abc"),arr[0]);
  20. cout << "debug ABC : " << mp ["abc"] << endl;
  21. if (arr [0] == arr [1]) mp.at("ab") = min(mp.at("ab"),arr[0]);
  22. cout << "debug AB : " << mp ["ab"] << endl;
  23. if (arr [0] == arr [2]) mp.at("ac") = min(mp.at("ac"),arr[0]);
  24. cout << "debug AC : " << mp ["ac"] << endl;
  25. if (arr [1] == arr [2]) mp.at("bc") = min(mp.at("bc"),arr[1]);
  26. cout << "debug BC : " << mp ["bc"] << endl;
  27. mp.at("a") = min(mp.at("a"),arr[0]);
  28. cout << "debug mp a : " << mp ["a"] << endl;
  29. mp.at("b") = min(mp.at("b"),arr[1]);
  30. cout << "debug mp b : " << mp ["b"] << endl;
  31. mp.at("c") = min(mp.at("c"),arr[2]);
  32. cout << "debug mp c : " << mp ["c"] << endl;
  33. }
  34. mpCombine.insert({"ABC",mp["abc"]});
  35. mpCombine.insert({"A,B,C",mp["a"]+mp["b"]+mp["c"]});
  36. mpCombine.insert({"AB,C",mp["ab"]+mp["c"]});
  37. mpCombine.insert({"AB,AC",mp["ab"]+mp["ac"]});
  38. mpCombine.insert({"AB,BC",mp["ab"]+mp["bc"]});
  39. mpCombine.insert({"AC,B",mp["ac"]+mp["b"]});
  40. mpCombine.insert({"AC,AB",mp["ac"]+mp["ab"]});
  41. mpCombine.insert({"AC,BC",mp["ac"]+mp["bc"]});
  42. mpCombine.insert({"BC,A",mp["bc"]+mp["a"]});
  43. mpCombine.insert({"BC,AB",mp["bc"]+mp["ab"]});
  44. mpCombine.insert({"BC,AC",mp["bc"]+mp["ac"]});
  45. }
  46.  
  47. long long solve2 (map <string,long long>& mp){
  48. long long ret = 1e8;
  49. for (auto& x : mp){
  50. cout << "debug mpCombine :: " << x.first << " " << x.second << endl;
  51. ret = min (ret,x.second);
  52. }
  53. return ret;
  54. }
  55.  
  56. int main (){
  57. cin >> N >> A >> B >> C;
  58. mp.insert({"abc",1e6});
  59. mp.insert({"ab",1e6});
  60. mp.insert({"ac",1e6});
  61. mp.insert({"bc",1e6});
  62. mp.insert({"a",1e6});
  63. mp.insert({"b",1e6});
  64. mp.insert({"c",1e6});
  65. while (N--){
  66. long long x; cin >> x;
  67. num.push_back(x);
  68. }
  69. solve1 (num);
  70. cout << solve2 (mpCombine);
  71. }
Success #stdin #stdout 0.01s 5280KB
stdin
3 3 4 5
8 9 11
stdout
debug A : 1
debug B : 0
debug C : 2
debug ABC : 1000000
debug AB : 1000000
debug AC : 1000000
debug BC : 1000000
debug mp a : 1
debug mp b : 0
debug mp c : 2
debug A : 0
debug B : 3
debug C : 1
debug ABC : 1000000
debug AB : 1000000
debug AC : 1000000
debug BC : 1000000
debug mp a : 0
debug mp b : 0
debug mp c : 1
debug A : 1
debug B : 1
debug C : 4
debug ABC : 1000000
debug AB : 1
debug AC : 1000000
debug BC : 1000000
debug mp a : 0
debug mp b : 0
debug mp c : 1
debug mpCombine :: A,B,C 1
debug mpCombine :: AB,AC 1000001
debug mpCombine :: AB,BC 1000001
debug mpCombine :: AB,C 2
debug mpCombine :: ABC 1000000
debug mpCombine :: AC,AB 1000001
debug mpCombine :: AC,B 1000000
debug mpCombine :: AC,BC 2000000
debug mpCombine :: BC,A 1000000
debug mpCombine :: BC,AB 1000001
debug mpCombine :: BC,AC 2000000
1