Iamtui1010

coin34.cpp

Jan 6th, 2022 (edited)
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<vector>
  4. #include<algorithm>
  5. #include<unordered_map>
  6.  
  7. #define long long long
  8. #define nln '\n'
  9.  
  10. const long COIN = 34;
  11.  
  12. using namespace std;
  13.  
  14. void sums(
  15.     vector<long> &vsm,
  16.     unordered_map<long, long> &cnt,
  17.     const vector<long> &a,
  18.     long bgn, long end, long sum, long qtt)
  19. {
  20.     if (bgn == end)
  21.     {
  22.         if (!cnt[sum])
  23.             cnt[sum] = qtt, vsm.push_back(sum);
  24.         else
  25.             cnt[sum] = max(cnt[sum], qtt);
  26.         return;
  27.     }
  28.     sums(vsm, cnt, a, bgn+1, end, sum+a[bgn], qtt+1);
  29.     sums(vsm, cnt, a, bgn+1, end, sum, qtt);
  30. }
  31.  
  32. long use(
  33.     long val,
  34.     const vector<long> &sm1,
  35.     const vector<long> &sm2,
  36.     unordered_map<long, long> co1,
  37.     unordered_map<long, long> co2)
  38. {
  39.     long res = -1;
  40.     for (const auto &i : sm1)
  41.         if (binary_search(sm2.begin(), sm2.end(), val-i))
  42.             res = max(res, co1[i]+co2[val-i]);
  43.     return res;
  44. }
  45.  
  46. int main()
  47. {
  48.     // initialization
  49.     // make coins
  50.     vector<long> a(COIN, 0);
  51.     a[0] = 2; a[1] = 3; a[2] = 5;
  52.     for (long i = 3; i < COIN; ++i)
  53.         a[i] = a[i-1]+a[i-2]+a[i-3];
  54.     // build sums
  55.     vector<long> sm1, sm2;
  56.     unordered_map<long, long> co1, co2;
  57.     sums(sm1, co1, a, 0, COIN/2, 0, 0);
  58.     sums(sm2, co2, a, COIN/2, COIN, 0, 0);
  59.     sort(sm2.begin(), sm2.end());
  60.     // Process
  61.     //freopen("coin34.inp", "r", stdin);
  62.     cin.tie(0)->sync_with_stdio(0);
  63.     cout.tie(0)->sync_with_stdio(0);
  64.     long tsc;
  65.     cin >> tsc;
  66.     for (long i = 1; i <= tsc; ++i)
  67.     {
  68.         long x;
  69.         cin >> x;
  70.         cout << "Case #" << i << ": " << use(x, sm1, sm2, co1, co2) << nln;
  71.     }
  72.     return 0;
  73. }
Add Comment
Please, Sign In to add comment