题解 | #MP3光标位置#

MP3光标位置

https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15

思路:使用两个滑窗记录当前歌词列表和选择的歌词,根据字符串中操作指令模拟即可
代码:
#感觉很简单,就是两个滑窗,一个长度为4,一个长度为1
#注意,大滑窗带一个光标,要与小滑窗区别开
#当然,要对歌曲总数做分类讨论
n=int(input())
s=list(input())
ans=0#存储最后选中的歌曲,即小滑窗,这里从0开始计数,方便后面做模运算
lst=[i for i in range(1,4)]#存储屏幕显示的歌曲,即大滑窗,n小于4时这里初始化会有问题,在下面的if中纠正
flag=1#存储大滑窗中光标选中的歌曲下标

#歌曲总数比屏幕小,只需要处理小滑窗
if n<=4:
    #处理小滑窗
    for i in s:
        if i=="U":
            ans=(ans-1+n)%n
        elif i=="D":
            ans=(ans+1)%n
    #处理大滑窗
    lst=[i for i in range(1,n+1)]

#歌曲总数比屏幕大,大小滑窗都要处理。
else:
    #处理小滑窗、大滑窗
    for i in s:
        if i=="U":
            if flag==1:#光标在第一个,大滑窗需要更新
                if ans==0:#并且是第一首歌
                    flag=4
                    #更新大滑窗
                    lst=[i for i in range(n-3,n+1)]
                else:
                    flag=1
                    #更新大滑窗
                    lst=[i-1 for i in lst]#每个元素都减1
            else:
                flag-=1#光标在2、3、4,直接光标上移即可
            ans=(ans-1+n)%n#处理小滑窗
        elif i=="D":
            if flag==4:#光标在最后一个,大滑窗需要更新
                if ans==n-1:#当前为最后一首歌
                    flag=1
                    lst=[i for i in range(1,5)]
                else:
                    flag=4
                    lst=[i+1 for i in lst]
            else:
                flag+=1
                    
            ans=(ans+1)%n#处理小滑窗
#输出结果
for i in lst:
    print(i,end=" ")
print()
print(ans+1)
    


#华为od#
全部评论

相关推荐

虽然大家都在劝退读研,说读研以后也是打工,不如本科直接去打工,但随着现在研究生越来越多,很多企业招聘要求就会变成研究生起招,本科投递简历就会被卡,横向比较时也会因为"本科学历比不上研究生学历"被筛掉,而且你没发现劝退读研的基本都是读完研的人吗?而且进体制、国企等,研究生也比本科生升的快,他们拿着研究生文凭劝你一个本科生,可别当真了
球1个offer:每个行业都是不一定的,例如计算机开发岗,只要是92学历,完全可以冲互联网大厂,没进去抛开运气因素,就是不够努力,准备的晚没有实习等等。计算机算法岗还是要读研的,研究生是基本要求。现在太多人无脑考研了,因为本科秋招春招啥都没准备过,只能读研
点赞 评论 收藏
分享
04-25 19:29
已编辑
宁波大学 运营
被普调的六边形战士很高大:你我美牛孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务