题解 | MP3光标位置
MP3光标位置
https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15
import sys
# 读取输入:歌曲总数和操作序列
songs_num = int(input()) # 歌曲总数
orders = input() # 操作序列(U:上移,D:下移)
# 初始化当前选中歌曲和相对位置
orgin_song = 1 # 当前选中的歌曲编号(初始为1)
assist_list = [int(x) for x in range(1, songs_num+1)] # 歌曲列表[1,2,...,songs_num]
xiangdui_place = orgin_song # 当前选中歌曲在可视窗口中的相对位置(1-4)
# 处理歌曲数≤4的特殊情况
if songs_num <= 4:
if songs_num == 1:
print('1') # 只有1首歌
elif songs_num == 2:
print('1 2') # 2首歌
elif songs_num == 3:
print('1 2 3') # 3首歌
else:
print('1 2 3 4') # 4首歌
else:
# 处理每个操作指令
for i in range(len(orders)):
if orders[i] == 'U': # 上移操作
if orgin_song == 1: # 特殊处理:从第一首歌上移
orgin_song = songs_num # 跳转到最后一首歌
xiangdui_place = 4 # 相对位置设为4(窗口底部)
else:
orgin_song -= 1 # 正常上移
xiangdui_place -= 1 # 相对位置上移
if xiangdui_place == 0: # 防止越界
xiangdui_place = 1
elif orders[i] == 'D': # 下移操作
if orgin_song == songs_num: # 特殊处理:从最后一首歌下移
orgin_song = 1 # 跳转到第一首歌
xiangdui_place = 1 # 相对位置设为1(窗口顶部)
else:
orgin_song += 1 # 正常下移
xiangdui_place += 1 # 相对位置下移
if xiangdui_place == 5: # 防止越界
xiangdui_place = 4
# 根据最终相对位置,输出当前可视窗口中的4首歌
if xiangdui_place == 1: # 选中歌曲在窗口第1个位置
print(' '.join(map(str, assist_list[orgin_song-1:orgin_song+3])))
elif xiangdui_place == 2: # 选中歌曲在窗口第2个位置
print(' '.join(map(str, assist_list[orgin_song-2:orgin_song+2])))
elif xiangdui_place == 3: # 选中歌曲在窗口第3个位置
print(' '.join(map(str, assist_list[orgin_song-3:orgin_song+1])))
else: # 选中歌曲在窗口第4个位置
print(' '.join(map(str, assist_list[orgin_song-4:orgin_song])))
# 输出最终选中的歌曲编号
print(orgin_song)
