CLZ银行问题
CLZ银行问题
题目描述
CLZ 银行只有两个接待窗口,VIP 窗口和普通窗口,VIP用户进入 VIP 窗口排队,剩下的进入普通窗口排队。现有M 次操作,操作有四种类型,如下:
- IN name V:表示一名叫 name 的用户到 VIP 窗囗排队
- OUT V:表示 VIP 窗口队头的用户离开排队
- IN name N:表示一名叫 name 的用户到普通窗口排队
- OUT N:表示普通窗口队头的用户离开排队
求 M 次操作结束后 VIP 窗口队列和普通窗口队列中的姓名。
输入描述
第一行是一个整数 M(1≤ M ≤ 1000),表示一共有 M次操作。
第二行到第 M +1行输入操作,格式如下
- IN name V
- OUT V
- IN name N
- OUT N
输出描述
输出 I 次操作后 VIP 窗囗队列和普通窗口队列中的姓名(从头到尾),先输出 VIP窗口队列后输出普通窗口队列。
输入输出样例
示例 1
输入
5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V
输出
Adel
CLZ
laozhao
思路分析
根据题目要求可知,用户成员为先进先出,所以使用队列来存储;再做多次对比判断:操作类型、用户名、用户类型,进行不同操作。
解答
import java.util.*;
public class Main {
static Queue<String> v = new LinkedList<>(); //存储VIP用户
static Queue<String> p = new LinkedList<>(); //存储普通用户
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int m = sc.nextInt(); //m次操作
while (m > 0){
m--;
String op,name,type;
op = sc.next();
if (op.contains("IN")){
name = sc.next();
type = sc.next();
if (type.contains("V")){
v.offer(name);
}else
p.offer(name);
}else {
type = sc.next();
if (type.contains("V")){
v.poll();
}else
p.poll();
}
}
while (v.size() != 0){
System.out.println(v.poll());
}
while (p.size() != 0){
System.out.println(p.poll());
}
}
}