1062 Talent and Virtue

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/A7_RIPPER/article/details/84325795