在 absi2011 的帮派里,死号偏多。现在 absi2011 和帮主等人联合决定,要清除一些死号,加进一些新号,同时还要鼓励帮贡多的人,对帮派进行一番休整。
题目描述
目前帮派内共最多有一位帮主,两位副帮主,两位护法,四位长老,七位堂主,二十五名精英,帮众若干。
现在 absi2011 要对帮派内几乎所有人的职位全部调整一番。他发现这是个很难的事情。于是要求你帮他调整。
他给你每个人的以下数据:
他的名字(长度不会超过 3030),他的原来职位,他的帮贡,他的等级。
他要给帮贡最多的护法的职位,其次长老,以此类推。
可是,乐斗的显示并不按帮贡排序而按职位和等级排序。
他要你求出最后乐斗显示的列表(在他调整过职位后):职位第一关键字,等级第二关键字。
注意:absi2011 无权调整帮主、副帮主的职位,包括他自己的(这不是废话么..)
他按原来的顺序给你(所以,等级相同的,原来靠前的现在也要靠前,因为经验高低的原因,但此处为了简单点省去经验。)
输入格式
第一行一个正整数 nn,表示星月家园内帮友的人数。
下面 nn 行每行两个字符串两个整数,表示每个人的名字、职位、帮贡、等级。
输出格式
一共输出 nn 行,每行包括排序后乐斗显示的名字、职位、等级。
#include<bits/stdc++.h>
using namespace std;
struct node
{
string na,zw,zww;
int bg,dj,level;
}a[1000];
int change(string a)
{
if(a=="BangZhu")
return 0;
if(a=="FuBangZhu")
return 1;
if(a=="HuFa")
return 2;
if(a=="ZhangLao")
return 3;
if(a=="TangZhu")
return 4;
if(a=="JingYing")
return 5;
if(a=="BangZhong")
return 6;
}
bool cmp(node a,node b)
{
if(a.bg==b.bg)
{
return a.level<b.level;
}
else
return a.bg>b.bg;
}
bool cmp2(node a,node b)
{
if(change(a.zww)==change(b.zww)&&a.dj==b.dj)
{
return a.level<b.level;
}
else if(change(a.zww)==change(b.zww)&&a.dj!=b.dj)
{
return a.dj>b.dj;
}
else
return change(a.zww)<change(b.zww);
}
int main()
{
int m;
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i].na>>a[i].zw>>a[i].bg>>a[i].dj;
a[i].level=i;
}
sort(a+4,a+m+1,cmp);
for(int i=1;i<=m;i++)
{
if(i==1)
a[i].zww="BangZhu";
if(i==2||i==3)
a[i].zww="FuBangZhu";
if(i==4||i==5)
a[i].zww="HuFa";
if(i>=6&&i<=9)
a[i].zww="ZhangLao";
if(i>=10&&i<=16)
a[i].zww="TangZhu";
if(i>=17&&i<=41)
a[i].zww="JingYing";
if(i>41)
a[i].zww="BangZhong";
}
sort(a+1,a+m+1,cmp2);
for(int i=1;i<=m;i++)
cout<<a[i].na<<" "<<a[i].zww<<" "<<a[i].dj<<endl;
}