此题我就简单的用了下Arraylist就过了。
我想是数据小吧。( ̄_, ̄ ) 开心的偷懒
每一个down的歌单意味着往上升,“保险”地看法是升的过程中顺序不变,以免无法全部满足,大家至少都可以往上挤一挤;而down的同上嘛,根据题意可知不变的就让他不变在前面的基础上插(挤)进去就好。
用三个数组存up ,down,same。down 和 up 先后放入链表中,然后same的数组往里面一插,大功告成!
import java.util.ArrayList;
import java.util.Scanner;
public class Main{
public static class off{
private String a; //名字
private String b; //状态
public off(){
}
public off(String a,String b){
this.a=a;
this.b=b;
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String r=sc.nextLine();
off x[]=new off[n];
int w[]=new int[n]; //装上升状态的
int s[]=new int[n]; //装下降的
int e[]=new int[n]; //装不变的
int q=0,p=0,o=0;
for (int i = 0; i < x.length; i++) { //存数据
String A=sc.next();
String B=sc.next();
x[i]=new off(A,B);
if(B.equals("UP")){
w[q++]=i;
}else if(B.equals("DOWN")){
s[p++]=i;
}else{
e[o++]=i;
}
}
ArrayList<String> d=new ArrayList<String>();
for (int i = 0; i <p; i++) { //先放下降的
d.add(x[s[i]].a);
}
for (int i = 0; i <q; i++) { // 再放上升的
d.add(x[w[i]].a);
}
for (int i = 0; i <o; i++) { // 最后插一插
d.add((e[i]),x[e[i]].a);
}
for (int i = 0; i < d.size(); i++) {
System.out.println(d.get(i));
}
}
}