Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long
- bool state;
- typedef struct Member{
- string name,joindate;
- ll age,money,entryorder;
- bool membership;
- }member;
- vector<member> all;
- bool datecmp(const string &a,const string &b){
- for(int i=0;i<10;i++) if(a[i]!=b[i]) return a[i]<b[i];
- }
- bool namecmp(const string &a,const string &b){
- for(int i=0;i<a.length()||i<b.length();i++) if(a[i]!=b[i]) return a[i]<b[i];
- }
- bool cmp0(const member &a,const member &b){//Panda Hospital
- if(a.membership!=b.membership) return a.membership>b.membership;
- if(a.joindate!=b.joindate) return datecmp(a.joindate,b.joindate);
- if(a.name!=b.name) return namecmp(a.name,b.name);
- return a.entryorder<b.entryorder;
- }
- bool cmp1(const member &a,const member &b){//Bear Hospital
- if(a.money!=b.money) return a.money>b.money;
- return a.entryorder<b.entryorder;
- }
- bool cmp(member &a,member &b){
- return state? cmp1(a,b):cmp0(a,b);
- }
- void swap(member &a,member &b){
- member temp=a;
- a=b;
- b=temp;
- }
- void max_heapify(ll start,ll end){
- ll dad=start,son=dad*2+1;
- while(son<=end){
- if(son+1<=end&&cmp(all[son+1],all[son])) son++;
- if(cmp(all[dad],all[son])) return; else{
- swap(all[dad],all[son]);
- dad=son;
- son=dad*2+1;
- }
- }
- }
- void heap_sort(ll n){
- ll i,len=all.size();
- for (i=len/2-1;i>=0;i--) max_heapify(i,len - 1);
- for (i=len-1;i>=max((ll)0,len-n);i--){
- swap(all[0],all[i]);
- max_heapify(0,i-1);
- }
- }
- int main(){
- std::ios_base::sync_with_stdio(false);
- cin.tie(0);
- ll n,day,entryorder=0,x,y,income,size;
- cin>>n>>day;
- member temp;
- for(ll i=0;i<n;i++){
- cin.ignore();
- getline(cin,temp.name);
- cin>>temp.age>>temp.money>>temp.membership>>temp.joindate;
- temp.entryorder=entryorder++;
- all.emplace_back(temp);
- }
- for(int today=1;today<=day;today++){
- cout<<"DAY #"<<today<<'\n';
- income=0;
- cin>>n>>x>>y;
- for(ll i=0;i<n;i++){
- cin.ignore();
- getline(cin,temp.name);
- cin>>temp.age>>temp.money>>temp.membership>>temp.joindate;
- temp.entryorder=entryorder++;
- all.emplace_back(temp);
- }
- state=false;
- heap_sort(x);
- size=all.size();
- for(ll i=0;i<min(x,size);i++){
- cout<<all[size-i-1].name<<' '<<all[size-i-1].age<<'\n';
- income+=all[size-i-1].money;
- }
- if(x>0) if(x<all.size()) all.erase(all.end()-x,all.end()); else all.clear();
- state=true;
- heap_sort(y);
- if(y>0) if(y<all.size()) all.erase(all.end()-y,all.end()); else all.clear();
- cout<<"INCOME TODAY: "<<9*income/10<<'\n';
- }
- return 0;
- }
- /*
- CS2351_DS_24Spring_HW5
- https://acm.cs.nthu.edu.tw/contest/3013/
- NTHU OJ 14319 - Corrupt Hospital
- AC code
- 2024 May 24
- */
Advertisement
Add Comment
Please, Sign In to add comment