Advertisement
yicongli

CF865B

Jan 20th, 2021 (edited)
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define gc c=getchar()
  6. #define r(x) read(x)
  7. #define ll long long
  8.  
  9. template<typename T>
  10. inline void read(T&x){
  11.     x=0;T k=1;char gc;
  12.     while(!isdigit(c)){if(c=='-')k=-1;gc;}
  13.     while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
  14. }
  15.  
  16. struct Person{
  17.     int a,b,c,d;
  18. };
  19.  
  20. inline bool cmp(const Person &a,const Person &b){
  21.     return a.d<b.d;
  22. }
  23.  
  24. vector<Person>A,B;
  25.  
  26. int main(){
  27.     // freopen(".in","r",stdin);
  28.     // freopen(".out","w",stdout);
  29.     int n,s;r(n),r(s);
  30.     ll cnt1=0;
  31.     ll cnt2=0;
  32.     ll ans=0;
  33.     for(int i=0;i<n;++i){
  34.         int a,b,c;r(c),r(a),r(b);
  35.         if(a>b){
  36.             A.push_back(Person{a,b,c,a-b});
  37.             cnt1+=c;
  38.             ans+=(ll)a*c;
  39.         }
  40.         else {
  41.             B.push_back(Person{a,b,c,b-a});
  42.             cnt2+=c;
  43.             ans+=(ll)b*c;
  44.         }
  45.     }
  46.     cnt1%=s;
  47.     cnt2%=s;
  48.     if(cnt1+cnt2<=s){
  49.         sort(A.begin(),A.end(),cmp);
  50.         sort(B.begin(),B.end(),cmp);
  51.         ll cost1=0;
  52.         ll cost2=0;
  53.         for(int i=0;i<A.size()&&cnt1>0;++i){
  54.             cost1+=A[i].d*min(cnt1,(ll)A[i].c);
  55.             cnt1-=A[i].c;
  56.         }
  57.         for(int i=0;i<B.size()&&cnt2>0;++i){
  58.             cost2+=B[i].d*min(cnt2,(ll)B[i].c);
  59.             cnt2-=B[i].c;
  60.         }
  61.         ans-=min(cost1,cost2);
  62.     }
  63.     printf("%lld\n",ans);
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement