版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/A7_RIPPER/article/details/84325795
题目大意:
根据每个人才能和美德的分数分为“圣人”,“君子”,“愚人”,“其他”四种,所有分数均不小于下限的人参与排名,并按照“圣人”,“君子”,“愚人”,“其他”的优先级跟据总分>美德>编号的优先级排序。
解题思路:
分别把这四种人放到四个结构体数组中,然后分别排序输出即可。
代码如下:
#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;
}