package 洛谷P1786;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class P1786 {
//难在难在你要想到用两次排序,第一次先把下面得人按照钱来拍,然后再细分钱的
//看上去只是一个简单的模拟,但其实还是有很多细节的
public static class ren{
String name;
String status;
int money;
int rank;
int num;
ren(String name, String status, int money, int rank, int num) {
super();
this.name = name;
this.status = status;
this.money = money;
this.rank = rank;
this.num = num;
}
}
//现在就有个问题第二次排序比地位怎么排序,所以我们要把地位转化成数字,这样就可以成功排了
public static int transform(String a)
{
if (a=="BangZhu") return 0;
else if (a=="FuBangZhu") return 1;
else if (a=="HuFa") return 2;
else if (a=="ZhangLao") return 3;
else if (a=="TangZhu") return 4;
else if (a=="JingYing") return 5;
else return 6;
}
public static class compare implements Comparator<ren>{
@Override
public int compare(ren o1, ren o2) {
if(o1.money==o2.money)return o1.num-o2.num;//序号降序
else return o2.money-o1.money;//钱降序
}
}
//如果等级相等职位相等,那么按照先来后到的原则排
//如果职位相等等级不相等,那么按照等级排
//最后按职位来排
public static class compare2 implements Comparator<ren>{
@Override
public int compare(ren o1, ren o2) {
if(transform(o1.status)==transform(o2.status))
{
if(o1.rank==o2.rank)return o1.num-o2.num;
return o2.rank-o1.rank;
}
else return transform(o1.status)-transform(o2.status);
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
ren r[]=new ren[n];
for(int i=0;i<n;i++)
{
String name1=in.next();
String status2=in.next();
int mone1=in.nextInt();
int rank1=in.nextInt();
int num1=i;
r[i]=new ren(name1,status2,mone1,rank1,num1);
}
Arrays.sort(r,3,n,new compare());//先把除了帮主和副帮主的人按照钱升序排序
//这时候除了那三个傻逼以外都是钱来排的咯,那么现在给他们搞地位好吧
for(int i=0;i<n;i++)
{
if (i==0) r[i].status="BangZhu";
else if (i==1||i==2) r[i].status="FuBangZhu";
else if (i==3||i==4) r[i].status="HuFa";
else if (i>=5&&i<=8) r[i].status="ZhangLao";
else if (i>=9&&i<=15) r[i].status="TangZhu";
else if (i>=16&&i<=40) r[i].status="JingYing";
else r[i].status="BangZhong";
}
Arrays.sort(r,0,n,new compare2());
for(int i=0;i<n;i++)
{
System.out.print(r[i].name+" "+r[i].status+" "+r[i].rank);
System.out.println();
}
}
}
详细请看注释,主要难在思维上