首页 > 其他 > 详细

Loj 538 递推数列

时间:2019-02-26 21:10:05      阅读:161      评论:0      收藏:0      [点我收藏+]

Loj 538 递推数列

出题人:这题提高难度吧.于是放在了%你赛的 \(D1T2\) .

  • 递推式为 \(a_i=k*a_{i-1}+a_{i-2}\) , 注意到 \(k\in \mathbb{N_+}\) ,容易发现一个比较显然的性质:

    \(a_i>a_{i-1}\geq 0\) , 或者 \(a_i<a_{i-1}\leq 0\) ,则该数列在第 \(i-1\) 项后单调上升或单调下降.

  • 基于这个性质,一个比较自然的想法是,一直爆算 \(a_i\) ,使得数列 \(a\) 单调后退出,再利用单调性来算答案.

  • 这样搞能得到多少分? \(20?\ 25?\ 30?\) 万一被构造数据卡到很久都进不了单调咋办?

  • 事实上,这样计算可以获得 \(100\) 分的好成绩.借助下面这张图来分析,比例可能不太真实,意会即可.

技术分享图片

  • 假定在 \(i=pos\) 处第一次满足 \(a_i>a_{i-1}\geq 0\)\(a_i<a_{i-1}\leq 0\).那么 \(pos-1\) 之前的项都是正负交替出现的.否则若有 \(i<pos-1,0<a_i<a_{i-1}\) ,则 \(a_{i+1}>a_i>0\) , \(i+1<pos\) , 应是第一个找到的 \(pos\) ,矛盾.
  • 那么记 \(b_i=|a_i|\) ,则有 \(\forall\ i\in [2,pos-1),b_i=-kb_{i-2}+b_{i-1}.\),且 \(b\) 单调递减.
  • 移项变形,得 \(b_{i-2}=kb_{i-1}+b_i\geq(k+1)b_i\). 又因 \(k\in \mathbb{N_+}\) ,可得 \(pos\leq 2log_{k+1}|a_0|\) .
  • 类似可以证明单调后在 \(O(loga)\) 个数内,绝对值将超过前面( \(S_1\) 内元素)的绝对值.
  • 于是,整个算法的时间复杂度为 \(O(nloga)\) .实现起来细节比较多.

有时, \(yy\) 出一个做法或许并不难,难的是判断这个做法是否可行...

Loj 538 递推数列

原文:https://www.cnblogs.com/jklover/p/10439980.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!