076

DS HW5

076
May 24th, 2024 (edited)
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.92 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. bool state;
  5. typedef struct Member{
  6.     string name,joindate;
  7.     ll age,money,entryorder;
  8.     bool membership;
  9. }member;
  10. vector<member> all;
  11. bool datecmp(const string &a,const string &b){
  12.     for(int i=0;i<10;i++) if(a[i]!=b[i]) return a[i]<b[i];
  13. }
  14. bool namecmp(const string &a,const string &b){
  15.     for(int i=0;i<a.length()||i<b.length();i++) if(a[i]!=b[i]) return a[i]<b[i];
  16. }
  17. bool cmp0(const member &a,const member &b){//Panda Hospital
  18.     if(a.membership!=b.membership) return a.membership>b.membership;
  19.     if(a.joindate!=b.joindate) return datecmp(a.joindate,b.joindate);
  20.     if(a.name!=b.name) return namecmp(a.name,b.name);
  21.     return a.entryorder<b.entryorder;
  22. }
  23. bool cmp1(const member &a,const member &b){//Bear Hospital
  24.     if(a.money!=b.money) return a.money>b.money;
  25.     return a.entryorder<b.entryorder;
  26. }
  27. bool cmp(member &a,member &b){
  28.     return state? cmp1(a,b):cmp0(a,b);
  29. }
  30. void swap(member &a,member &b){
  31.     member temp=a;
  32.     a=b;
  33.     b=temp;
  34. }
  35. void max_heapify(ll start,ll end){
  36.     ll dad=start,son=dad*2+1;
  37.     while(son<=end){
  38.         if(son+1<=end&&cmp(all[son+1],all[son])) son++;
  39.         if(cmp(all[dad],all[son])) return; else{
  40.             swap(all[dad],all[son]);
  41.             dad=son;
  42.             son=dad*2+1;
  43.         }
  44.     }
  45. }
  46. void heap_sort(ll n){
  47.     ll i,len=all.size();
  48.     for (i=len/2-1;i>=0;i--) max_heapify(i,len - 1);
  49.     for (i=len-1;i>=max((ll)0,len-n);i--){
  50.         swap(all[0],all[i]);
  51.         max_heapify(0,i-1);
  52.     }
  53. }
  54. int main(){
  55.     std::ios_base::sync_with_stdio(false);
  56.     cin.tie(0);
  57.     ll n,day,entryorder=0,x,y,income,size;
  58.     cin>>n>>day;
  59.     member temp;
  60.     for(ll i=0;i<n;i++){
  61.         cin.ignore();
  62.         getline(cin,temp.name);
  63.         cin>>temp.age>>temp.money>>temp.membership>>temp.joindate;
  64.         temp.entryorder=entryorder++;
  65.         all.emplace_back(temp);
  66.     }
  67.     for(int today=1;today<=day;today++){
  68.         cout<<"DAY #"<<today<<'\n';
  69.         income=0;
  70.         cin>>n>>x>>y;
  71.         for(ll i=0;i<n;i++){
  72.             cin.ignore();
  73.             getline(cin,temp.name);
  74.             cin>>temp.age>>temp.money>>temp.membership>>temp.joindate;
  75.             temp.entryorder=entryorder++;
  76.             all.emplace_back(temp);
  77.         }
  78.         state=false;
  79.         heap_sort(x);
  80.         size=all.size();
  81.         for(ll i=0;i<min(x,size);i++){
  82.             cout<<all[size-i-1].name<<' '<<all[size-i-1].age<<'\n';
  83.             income+=all[size-i-1].money;
  84.         }
  85.         if(x>0) if(x<all.size()) all.erase(all.end()-x,all.end()); else all.clear();
  86.         state=true;
  87.         heap_sort(y);
  88.         if(y>0) if(y<all.size()) all.erase(all.end()-y,all.end()); else all.clear();
  89.         cout<<"INCOME TODAY: "<<9*income/10<<'\n';
  90.     }
  91.     return 0;
  92. }
  93. /*
  94. CS2351_DS_24Spring_HW5
  95. https://acm.cs.nthu.edu.tw/contest/3013/
  96. NTHU OJ 14319 - Corrupt Hospital
  97. AC code
  98. 2024 May 24
  99. */
Advertisement
Add Comment
Please, Sign In to add comment