题解 | 小红蹦跳蹦跳

小红蹦跳蹦跳

https://www.nowcoder.com/practice/6f4a93135cc54f4ba840947691efa053

fmin = lambda x, y: x if x < y else y
fmax = lambda x, y: x if x > y else y

mod = 10 ** 9 + 7

# @TIME
def solve(testcase):
    n = II()

    if n == 1:
        print(1)
        return

    dpl = [0 for _ in range(n + 1)]
    dpr = [0 for _ in range(n + 1)]
    dpl[0] = 1
    dpr[0] = 1

    pslo = [0 for _ in range(n + 1)]
    psro = [0 for _ in range(n + 1)]
    psle = [0 for _ in range(n + 1)]
    psre = [0 for _ in range(n + 1)]
    psle[0] = 1
    psre[0] = 1

    for i in range(1, n + 1):
        if i & 1:
            dpl[i] = psre[i - 1]
            pslo[i] = dpl[i]
            dpr[i] = pslo[i - 2]
            psro[i] = dpr[i]
        else:
            dpl[i] = psro[i - 1]
            psle[i] = dpl[i]
            dpr[i] = psle[i - 2]
            psre[i] = dpr[i]
        
        pslo[i] = (pslo[i] + pslo[i - 1]) % mod
        psle[i] = (psle[i] + psle[i - 1]) % mod
        psro[i] = (psro[i] + psro[i - 1]) % mod
        psre[i] = (psre[i] + psre[i - 1]) % mod
    
    print((dpl[n] + dpr[n]) % mod)

for testcase in range(1):
    solve(testcase)

全部评论

相关推荐

hwwhwh:同双非,有大厂实习其实也没啥用,主要看运气,等就行了
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

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