P2609 [ZJOI2012] 数列

题目传送门

实在是泰裤辣!

直接推导??不存在的。

最直接的想法是记忆化搜索,但是不想写高精……

观察发现每个 \(a_n\) 都可以写成 \(x\times a_0+y\times a_1\) 的形式。你对单个 \(a_i\) 计算系数和记忆化搜索无异。观察条件,考虑一个二元组 \((a_i,a_{i+1})\),发现可以转化成对 \((a_{i/2},a_{i/2+1})\) 的求解。

  • \(i\) 是偶数时,\(\lambda a_i+\mu a_{i+1}=(\lambda +\mu)a_{i/2}+\mu a_{i/2+1}\)
  • \(i\) 是奇数时,\(\lambda a_i+\mu a_{i+1}=\mu a_{i/2}+ (\lambda +\mu)a_{i/2+1}\)

于是可以 \(\mathcal{O}(\log n)\) 计算。

人生苦短,我用 Pyhton。

T=int(input())
for i in range(0,T):
    n=int(input())
    x=1
    y=0
    while n>0:
        if n%2==0:
            x+=y;
        else:
            y+=x;
        n//=2;
    print(y)
posted @ 2024-02-02 21:55  xishanmeigao  阅读(12)  评论(0)    收藏  举报