Advertisement
tyaadi

Story of Seasons

Jan 2nd, 2023
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.19 KB | None | 0 0
  1. #include   <bits/stdc++.h>
  2. // #include <ext/pb_ds/assoc_container.hpp>
  3. // #include <ext/pb_ds/tree_policy.hpp>
  4.  
  5.  
  6. using namespace std;
  7. // using namespace __gnu_pbds;
  8.  
  9.  
  10. #define  endl            '\n'
  11. #define  pb              push_back
  12. #define  rep(i,a,n)      for(ll i =a;i<n;i++)
  13. #define  min3(a,b,c)     min(a,min(b,c))
  14. #define  min4(a,b,c,d)   min(a,min(b,min(c,d)))
  15. #define  max3(a,b,c)     max(a,max(b,c))
  16. #define  max4(a,b,c,d)   max(a,max(b,max(c,d)))
  17. #define  mod             1000000007
  18. #define  fastio()        ios::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL);
  19. #define  ss              second
  20. #define  ff              first
  21. #define  gcd             __gcd
  22. #define  all(x)          x.begin(),x.end()
  23. #define  wttt            while(t--)
  24. #define  printall(v)     for(auto value:v) cout<<value<<" ";cout<<endl;
  25. #define  mp              make_pair
  26. #define  PI              3.141592653589793238462643383279502884197
  27. #define  ub              upper_bound
  28. #define  lb              lower_bound
  29. #define  read(v,n)       rep(i,0,n)cin>>v[i];
  30. #define  count_set_bits  __builtin_popcountll
  31.  
  32.  
  33.  
  34. #ifndef ONLINE_JUDGE
  35. #define debug(x) cerr << #x<<" "; _print(x); cerr << endl;
  36. #else
  37. #define debug(x);
  38. #endif
  39.  
  40.  
  41. typedef long long int ll;
  42. typedef long double ld;
  43. typedef unsigned long long ull;
  44. typedef vector<ll> vll;
  45. typedef pair<ll,ll>pll;
  46. typedef map<ll,ll> mll;
  47. typedef vector<vector<ll>> vvll;
  48. typedef vector<pair<ll,ll>> vpll;
  49. typedef vector<ld> vld;
  50. typedef vector<char> vch;
  51. typedef vector<vector<char>> vvch;
  52. // typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update > pbds;
  53.  
  54. ld eps = 1e-9;
  55.  
  56. /*
  57. For using ordered_set :
  58.  
  59. 1. *s.find_by_order(k) --> Returns the element present at index k.
  60.  
  61. 2.  s.order_of_key(k) -->  Returns the number of elements smaller than k.
  62. */
  63.  
  64.  
  65.  
  66.  
  67.  
  68. void _print(ll t) {cerr << t;}
  69. void _print(int t) {cerr << t;}
  70. void _print(string t) {cerr << t;}
  71. void _print(char t) {cerr << t;}
  72. void _print(ld t) {cerr << t;}
  73. void _print(double t) {cerr << t;}
  74. void _print(ull t) {cerr << t;}
  75. // void _print(pbds v) {cerr << "[ "; for (auto i : v) {_print(i); cerr << " ";} cerr << "]";}
  76.  
  77. template <class T, class V> void _print(pair <T, V> p);
  78. template <class T> void _print(vector <T> v);
  79. template <class T> void _print(set <T> v);
  80. template <class T> void _print(set <T, greater<T>> v);
  81. template <class T, class V> void _print(map <T, V> v);
  82. template <class T, class V> void _print(multimap <T, V> v);
  83. template <class T> void _print(multiset <T> v);
  84. template <class T> void _print(multiset <T, greater<T>> v);
  85. template <class T, class V> void _print(pair <T, V> p) {cerr << "{"; _print(p.ff); cerr << ","; _print(p.ss); cerr << "}";}
  86. template <class T> void _print(vector <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
  87. template <class T> void _print(set <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
  88. template <class T> void _print(set <T, greater<T>> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
  89. template <class T> void _print(unordered_set <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
  90. template <class T> void _print(multiset <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
  91. template <class T> void _print(multiset <T, greater<T>> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
  92. template <class T, class V> void _print(map <T, V> v) {cerr << "[ "; for (auto i : v) {_print(i); cerr << " ";} cerr << "]";}
  93. template <class T, class V> void _print(multimap <T, V> v) {cerr << "[ "; for (auto i : v) {_print(i); cerr << " ";} cerr << "]";}
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112. void solve()
  113.  
  114. {
  115.     ll d, n, x;
  116.     cin>>d>>n>>x;
  117.     map<ll, vpll> m;
  118.     rep(i,0,n)
  119.     {
  120.         ll q,l,v;cin>>q>>l>>v;
  121.         ll day = d - l;
  122.         if(day < 1)
  123.         {
  124.             continue;
  125.         }
  126.         m[day].pb({v, q});
  127.     }
  128.    
  129.     vll days = {0};
  130.     for(auto val:m)
  131.     {
  132.         days.pb(val.ff);
  133.     }
  134.     debug(days);
  135.     reverse(all(days));
  136.     ll tot = 0, ans = 0;
  137.     multiset<pll, greater<pll>> s;
  138.     rep(i,0,days.size() - 1)
  139.     {
  140.         ll curr = days[i], next = days[i+1];
  141.         tot = tot + (curr - next)*x;
  142.         for(pll val:m[curr])
  143.         {
  144.             s.insert(val);
  145.         }
  146.         debug(s);
  147.         while(s.size() > 0 && tot > 0)
  148.         {
  149.             pll it = (*s.begin());
  150.             s.erase(s.begin());
  151.             if(tot >= it.ss)
  152.             {
  153.                 tot -= it.ss;
  154.                 ans += (it.ss * it.ff);
  155.             }
  156.             else
  157.             {
  158.                 ans += (it.ff * tot);
  159.                 it.ss -= tot;
  160.                 s.insert(it);
  161.                 tot = 0;
  162.             }
  163.         }
  164.     }
  165.    
  166.     cout<<ans<<endl;
  167.    
  168. }
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179. int main()
  180. {
  181.       #ifndef ONLINE_JUDGE
  182.       freopen("Error.txt", "w", stderr);
  183.       #endif
  184.  
  185.       fastio();
  186.  
  187.       ll t=1;
  188.       //pre();
  189.  
  190.       cin>>t;
  191.  
  192.  
  193.  
  194.       for(ll ttt = 1;ttt<=t;ttt++)
  195.       {
  196.        
  197.    
  198.            cout<<"Case #"<<ttt<<": ";
  199.    
  200.    
  201.         solve();
  202.    
  203.    
  204.       }
  205.  
  206.  
  207.  
  208.       return 0;
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement