题解 | #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
全部评论

相关推荐

点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务