题解 | #MP3光标位置#
MP3光标位置
https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15
// <=4: 不翻页 0123 光标位置变化,视窗不变
// >4: 四种特殊情况
// 列表第一首往前跳到最后一首,视窗移动;
// 视窗第一首往前,位置往前一步,视窗移动
// 视窗最后一首往后,位置往后一步,视窗移动;
// 列表最后一首往后跳到第一首,视窗移动
// 其余情况,位置变化,视窗不变
// start end 保存视窗头尾指针
let n = Number(readline()), action = readline().split('')
let music = [0], win = [], p = 1, start = 1, end = 4
for(let i=1; i<=n; i++) {
music[i] = i
}
fn(action)
print(win.join(' '))
print(p)
function fn(action) {
if(music.length<=5) { // 还有一个头部的0
win = music.slice(1)
action.forEach(a => {
if(a=='U') {
if(p==1)p=n
else p--
} else {
if(p==n)p=1
else p++
}
})
} else {
action.forEach(a => {
if(a=='U') {
if(p==1) { // 列表第一首往前跳到最后一首,视窗移动;
p=n
end = n
start = n-3
} else if(p==start) { // 视窗第一首往前,位置往前一步,视窗移动
p--
start = p
end--
} else {
p--
}
} else {
if(p==n) { // 列表最后一首往后跳到第一首,视窗移动
p=1
start = 1
end = 4
} else if(p==end) { // 视窗最后一首往后,位置往后一步,视窗移动;
p++
end = p
start++
} else {
p++
}
}
})
win = music.slice(start, end+1)
}
}
深信服公司福利 774人发布