1062 Talent and Virtue
阿新 • • 發佈:2018-11-22
題目大意:
根據每個人才能和美德的分數分為“聖人”,“君子”,“愚人”,“其他”四種,所有分數均不小於下限的人蔘與排名,並按照“聖人”,“君子”,“愚人”,“其他”的優先順序跟據總分>美德>編號的優先順序排序。
解題思路:
分別把這四種人放到四個結構體陣列中,然後分別排序輸出即可。
程式碼如下:
#include<iostream> #include<cstdio> #include<fstream> #include<set> #include<cmath> #include<cstring> #include<string> #include<map> #include<vector> #include<iomanip> #include<cstdlib> #include<list> #include<queue> #include<stack> #include<algorithm> #define inf 0x3f3f3f3f #define MOD 1000000007 #define mem0(a) memset(a,0,sizeof(a)) #define mem1(a) memset(a,-1,sizeof(a)) #define meminf(a) memset(a,inf,sizeof(a)) //vector ::iterator it; //set<int>::iterator iter; typedef long long ll; typedef unsigned long long ull; using namespace std; struct people { string id; int talent,virtue,total; }sage[100010],nobel[100010],fool[100010],rest[100010]; int cmp(people a,people b) { if(a.total==b.total)//總分 { if(a.virtue==b.virtue)return a.id<b.id;//美德分一樣,按照編號從小到大 else return a.virtue>b.virtue; } else return a.total>b.total; } int main() { std::ios::sync_with_stdio(false); cin.tie(0); int n,l,h,len1=0,len2=0,len3=0,len4=0; cin>>n>>l>>h; for(int i=0;i<n;i++) { string id; int talent,virtue; cin>>id>>virtue>>talent; if(talent<l||virtue<l)continue;//美德和才能均超過下限分參與排名 else if(talent>=h&&virtue>=h)//聖人 { sage[len1].id=id;sage[len1].talent=talent; sage[len1].virtue=virtue;sage[len1].total=virtue+talent; len1++; } else if(talent<h&&virtue>=h)//君子 { nobel[len2].id=id;nobel[len2].talent=talent; nobel[len2].virtue=virtue;nobel[len2].total=virtue+talent; len2++; } else if(talent>=l&&talent<h&&virtue>=l&&virtue<h&&virtue>=talent)//愚人 { fool[len3].id=id;fool[len3].talent=talent; fool[len3].virtue=virtue;fool[len3].total=virtue+talent; len3++; } else//其他 { rest[len4].id=id;rest[len4].talent=talent; rest[len4].virtue=virtue;rest[len4].total=virtue+talent; len4++; } } sort(sage,sage+len1,cmp);sort(nobel,nobel+len2,cmp);//分別排序 sort(fool,fool+len3,cmp);sort(rest,rest+len4,cmp); cout<<len1+len2+len3+len4<<endl; for(int i=0;i<len1;i++)cout<<sage[i].id<<' '<<sage[i].virtue<<' '<<sage[i].talent<<endl; for(int i=0;i<len2;i++)cout<<nobel[i].id<<' '<<nobel[i].virtue<<' '<<nobel[i].talent<<endl; for(int i=0;i<len3;i++)cout<<fool[i].id<<' '<<fool[i].virtue<<' '<<fool[i].talent<<endl; for(int i=0;i<len4;i++)cout<<rest[i].id<<' '<<rest[i].virtue<<' '<<rest[i].talent<<endl; // std::ios::sync_with_stdio(false); // cin.tie(0); // freopen("test.txt","r",stdin); // freopen("output.txt","w",stdout); return 0; }