注意:加了题目链接
目录
CLZ 的银行普通队列(队列)
链接:CLZ 的银行普通队列
题目描述
CLZ 银行只有两个接待窗口, V I P VIP VIP 窗口和普通窗口, V I P VIP VIP 用户进入 V I P VIP VIP 窗口排队,剩下的进入普通窗口排队。现有 M M M 次操作,操作有四种类型,如下:
IN name V
:表示一名叫name
的用户到 V I P VIP VIP 窗口排队OUT V
:表示 V I P VIP VIP 窗口队头的用户离开排队IN name N
:表示一名叫name
的用户到普通窗口排队OUT N
:表示普通窗口队头的用户离开排队
求 M M M 次操作结束后 V I P VIP VIP 窗口队列和普通窗口队列中的姓名。
输入描述
第一行是一个整数
M
(
1
≤
M
≤
1000
)
M(1\leq M \leq 1000)
M(1≤M≤1000),表示一共有
M
M
M 次操作。
第二行到第
M
+
1
M+1
M+1 行输入操作,格式如下:
IN name V
OUT V
IN name N
OUT N
输出描述
输出 M M M 次操作后 V I P VIP VIP 窗口队列和普通窗口队列中的姓名(从头到尾),先输出 V I P VIP VIP 窗口队列后输出普通窗口队列。
输入输出样例
示例1
输入
5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V
输出
Adel
CLZ
laozhao
代码演示
主要使用python中的deque模块,q_N.append从队尾加元素,q_N.popleft从队头加元素
from collections import deque
m = int(input())
# 创建两个队,VIP和普通窗口
q_V = deque()
q_N = deque()
l0 = []
for i in range(m):
l1 = list(map(str, input().split()))
if len(l1) > 2: # 输入大于2,证明是进队
operation, name, user_type = l1[0], l1[1], l1[2]
if operation == 'IN':
if user_type == 'N': # 判断用户类型
q_N.append(name)
else:
q_V.append(name)
else: # 出队操作
operation, user_type = l1[0], l1[1]
if operation == 'OUT':
if user_type == 'N':
user_name = q_N.popleft()
else:
user_name = q_V.popleft()
for name in q_V:
print(name)
for name in q_N:
print(name)
小邋遢的衣橱(栈)
链接:小邋遢的衣橱
题目描述
小邋遢
M
S
.
J
i
n
l
i
n
MS.Jinlin
MS.Jinlin是个爱打扮的公主,他有很多晚礼服如 “LALA
” “NIHAOMA
” “WOBUHAO
” “NIHAOBUHAO
” 等众多衣服,可是由于衣服太多他要把它们装进箱子,但是作为公主,肯定是会突发奇想觉得哪件衣服好看,就把他拿了出来,当然那件衣服上面的衣服也被拿出来了,而且会弄乱了,小邋遢在经过几次的叠衣服和取衣服后,他想知道箱子里最上面的衣服是哪一件,如果箱子为空的话,就告诉她 Empty
,如果有多件一样的衣服,肯定是取走最上面的哪一件啦。
输入描述
第 1 1 1 行,输入 N N N,代表共计进行了几次操作。
第
2
2
2 行至第
N
+
1
N+1
N+1 行,进行 in out
操作(in
为 放入衣服,out
为 取出衣服)
格式如下:
in name1
out name2
输出描述
输出
N
N
N 次操作结束后箱子最上面的衣服名字,若箱子为空,输出 Empty
。
输入输出样例
示例1
输入
6
in AMDYES
in INTELNO
in USBAD
in CNYES
out INTELNO
in MDICN
输出
MDICN
示例2
输入
5
in AMDYES
in INTELNO
in USBAD
in CNYES
out AMDYES
输出
Empty
代码演示
stack = []
M = int(input())
for i in range(M):
operation, close_name = map(str, input().split())
if operation == 'in':
stack.append(close_name)
else:
if stack[-1] == close_name:
stack.pop()
else:
while True:
if stack[-1] == close_name:
stack.pop()
break
else:
stack.pop()
if len(stack) == 0:
print('Empty')
else:
print(stack[-1])
排序(排序)
链接:排序
题目描述
给定一个长度为 N N N 的数组 A A A,请你先从小到大输出它的每个元素,再从大到小输出它的每个元素。
输入描述
第一行包含一个整数 N N N。
第二行包含
N
N
N 个整数
a
1
,
.
.
.
,
a
n
a_1,...,a_n
a1,...,an ,表示数组
A
A
A 的元素。
1
≤
N
≤
5
×
1
0
5
1\leq N\leq 5\times10^5
1≤N≤5×105 ,
−
1
0
9
≤
a
i
≤
1
0
9
-10^9\leq a_i \leq 10^9
−109≤ai≤109。
输出描述
输出共两行,每行包含 N N N 个整数,表示答案。
输入输出样例
示例1
输入
5
1 3 2 6 5
输出
1 2 3 5 6
6 5 3 2 1
代码演示
python中可以使用sorted函数实现排序
a = int(input())
b = list(map(int, input().split()))
b1 = sorted(b) # 升序
b2 = sorted(b, reverse=True) # 降序
print(' '.join(list(map(str, b1))))
print(' '.join(list(map(str, b2))))