题解 | #MP3光标位置#测试用例有个坑
MP3光标位置
http://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15
提交后的测试用例‘83 UUDUDDDDUDUUDDDDUDD'是什么鬼。
为了能够提交成功还要特意为这种不换行的格式增设一道判断……不过多锻炼下倒也不是坏事。思路是学习前者,感谢分享,自己又重新码了一遍。
def fourSongs(n, order): # 曲目数量n<=4时(n=4时的情况归在这边计算量小)
moves = order.count('D') - order.count('U')
posit = moves % n + n + 1 if moves <=0 else moves % n + 1
print(*[i+1 for i in range(n)])
print(posit)
return
def overFive(n, order): # 曲目数量n > 4时
IOF = 1 # Index of First 当前页面第一首歌在整个播放列表中的序号(注意不是下标,而是序号,即下标+1)
POP = 1 # Position of Page 光标在当前页面所处的位置(即[1, 2, 3, 4])
for i in order: # 遍历order中的每一步命令,逐一操作。
if i == 'U':
if POP == 1:
if IOF == 1:
IOF = n - 3
POP = 4
else:
IOF -= 1
else:
POP -= 1
elif i == 'D':
if POP == 4:
if IOF == n - 3:
IOF = 1
POP = 1
else:
IOF += 1
else:
POP += 1
musicList = [i + 1 for i in range(n)]
print(*musicList[IOF-1: IOF + 4 - 1])
print(IOF + POP - 1)
return
def selectSong(n, order): # 用于判断曲目数量而自动选择用哪一套思路。
if n <= 4:
return fourSongs(n, order)
else:
return overFive(n, order)
while 1:
try:
s = input()
for x in s: # 判断输入内容是否符合标准格式,如提交时有一组测试用例:
if not x.isdigit(): # ’83 UUDUDDDDUDUUDDDDUDD‘,需要处理
s = s.strip().split()
n, order = int(s[0]), s[1].upper()
selectSong(n, order)
else: # 如果不存在以上非标格式的输入,那么常运行以下流程
n = int(s)
order = input().upper()
selectSong(n, order)
except:
break