题目大意

有两个数列a,ba,ba,b,定义如下。已知数列aaa有一个性质:对于任意的正整数xxx,存在唯一的整数对(p,q)(p,q)(p,q),满足aq−ap=xa_q-a_p=xaq​−ap​=x。现在有nnn个询问,每个询问给出一个正整数xix_ixi​,求出与之对应的整数对(pi,qi)(p_i,q_i)(pi​,qi​)(先输出qiq_iqi​,后输出pip_ipi​)。

an={nn⩽22an−1n>2, nmod2=1an−1+bn−1n>2, nmod2=0bn=mex{∣ai−aj∣∣1⩽i,j⩽n}\begin{aligned} a_n&=\begin{cases} n&n\leqslant 2\\ 2a_{n-1}&\text{$n>2$, $n\mod 2=1$}\\ a_{n-1}+b_{n-1}&\text{$n>2$, $n\mod 2=0$} \end{cases}\\ b_n&=\text{mex}\lbrace\vert a_i-a_j\vert\vert1\leqslant i,j\leqslant n\rbrace \end{aligned}an​bn​​=⎩⎪⎨⎪⎧​n2an−1​an−1​+bn−1​​n⩽2n>2, nmod2=1n>2, nmod2=0​=mex{∣ai​−aj​∣∣1⩽i,j⩽n}​

n⩽250000n\leqslant 250000n⩽250000,xi⩽109x_i\leqslant 10^9xi​⩽109。


思路

这是一道非常奇葩的题目。首先暴力打表方便找规律:

nnn 1 2 3 4 5 6 7 8
ana_nan​ 1 2 4 8 16 21 42 51
bnb_nbn​ 1 2 4 5 5 9 9 10
nnn 53 54 55 56 57
ana_nan​ 531141824 531141876 1062283752 1062283805 2124567610
bnb_nbn​ 52 53 53 54 54

注意到数列aaa的递推式中有an=2an−1a_n=2a_{n-1}an​=2an−1​的部分,这意味着ana_nan​增长得特别快,第60项以前就超过了10910^9109。因此确定一个界限NNN,让该界限内ana_nan​的值不至于远远超过10910^9109。先暴力计算a,ba,ba,b数列的前NNN项,统计可能出现的aq−apa_q-a_paq​−ap​的值,并记下与之对应的数对(p,q)(p,q)(p,q),时间复杂度O(N2)O(N^2)O(N2)。

若在刚才的暴力计算中出现了询问的xxx,说明aq,apa_q,a_paq​,ap​都比较小,直接输出对应的数对作为答案。下面讨论ap,aqa_p,a_qap​,aq​都特别大(远大于10910^9109)的情况:

  • qqq为偶数时,

    • 若q−p=1q-p=1q−p=1,有aq=ap+bpa_q=a_p+b_paq​=ap​+bp​,即aq−ap=bpa_q-a_p=b_paq​−ap​=bp​。
    • 若q−p=2q-p=2q−p=2,有aq=ap+1+bp+1=2ap+bp+1a_q=a_{p+1}+b_{p+1}=2a_p+b_{p+1}aq​=ap+1​+bp+1​=2ap​+bp+1​,即aq−ap=ap+bp+1a_q-a_p=a_p+b_{p+1}aq​−ap​=ap​+bp+1​,与x⩽109x\leqslant 10^9x⩽109矛盾,排除。
    • 若q−p>2q-p>2q−p>2,aq−apa_q-a_paq​−ap​的值只会更大,排除。
  • qqq为奇数时,
    • 若q−p=1q-p=1q−p=1,有aq=2apa_q=2a_paq​=2ap​,即aq−ap=apa_q-a_p=a_paq​−ap​=ap​,与x⩽109x\leqslant 10^9x⩽109矛盾,排除。
    • 若q−p⩾2q-p\geqslant 2q−p⩾2,跟qqq为偶数的情况类似,均排除。

经过上述讨论发现,若ap,aqa_p,a_qap​,aq​特别大,答案(p,q)(p,q)(p,q)一定满足qqq为偶数,bp=xb_p=xbp​=x,且q−p=1q-p=1q−p=1。于是问题变成了已知bpb_pbp​的值,求bpb_pbp​的下标ppp。下面观察数列bbb:

  • nnn为偶数时,有an=an−1+bn−1a_n=a_{n-1}+b_{n-1}an​=an−1​+bn−1​。此时集合{∣ai−aj∣∣1⩽i,j⩽n}\lbrace\vert a_i-a_j\vert\vert1\leqslant i,j\leqslant n\rbrace{∣ai​−aj​∣∣1⩽i,j⩽n}中出现了∣an−an−1∣=bn−1\vert a_n-a_{n-1}\vert=b_{n-1}∣an​−an−1​∣=bn−1​,因此一定有bn>bn−1b_n>b_{n-1}bn​>bn−1​。
  • nnn为奇数时,有an=2an−1a_n=2a_{n-1}an​=2an−1​。此时集合{∣ai−aj∣∣1⩽i,j⩽n}\lbrace\vert a_i-a_j\vert\vert1\leqslant i,j\leqslant n\rbrace{∣ai​−aj​∣∣1⩽i,j⩽n}中新添加的最小元素为an−an−1=an−1a_n-a_{n-1}=a_{n-1}an​−an−1​=an−1​,而该元素比原来集合中的最大元素an−1−an−2a_{n-1}-a_{n-2}an−1​−an−2​还要大得多,因此该集合的mex\text{mex}mex值不变,即bn=bn−1b_n=b_{n-1}bn​=bn−1​。

所以bbb数列靠后的项都是相邻两项相同,但大多数时候每次增加111,有的时候增加的值超过111。后者发生在nnn为偶数时,集合中出现了bn−1b_{n-1}bn−1​,但集合中可能原来就有bn−1+1b_{n-1}+1bn−1​+1。这个bn−1+1b_{n-1}+1bn−1​+1在添加进集合的时候一定是远大于当时集合中的最大元素的(否则bn−1b_{n-1}bn−1​早就应该出现),也就是说bn−1+1b_{n-1}+1bn−1​+1是在之前nnn为某个奇数时添加的。而由上文可知,此时添加的bn−1+1b_{n-1}+1bn−1​+1就是数列aaa中的某一项。又因为bn−1+1<bn⩽109b_{n-1}+1<b_n\leqslant 10^9bn−1​+1<bn​⩽109,所以数列aaa中的这一项是包含在最开始暴力计算的前NNN项当中的。

鉴于bbb数列在第偶数项会发生变化,将NNN设为奇数。假设bbb数组靠后的项每次增加111,有bp=bN+p−N2b_p=b_N+\frac{p-N}2bp​=bN​+2p−N​。但在数列aaa的前NNN项中可能已经出现了(bN,bp)(b_N,b_p)(bN​,bp​)内的值,每一个这样的值都会导致bbb数列在某一项多增加111。二分查找求出这样的值的个数cntcntcnt,于是

bp=bN+p−N2+cntb_p=b_N+\frac{p-N}2+cntbp​=bN​+2p−N​+cnt

将bp=xb_p=xbp​=x代入,解得

p=2⋅(x−bN−cnt)+Np=2\cdot(x-b_N-cnt)+Np=2⋅(x−bN​−cnt)+N

【题目】NKOJ-4247 老蒋的数列相关推荐

  1. NKOJ 4247 老蒋的数列(乱搞)

    P4247老蒋的数列 问题描述 输入格式 第一行一个整数n 接下来n行每行一个整数xi 输出格式 输出共包含n行 每行两个正整数q,p(要求q>p),表示与xi相对应的整数对 样例输入 4 20 ...

  2. 老蒋的 用WDCP 搭建

    随着VPS.服务器成本降低,越来越多的站长用户网站项目.软件项目环境都需要且会选择VPS.服务器.在建站用户群中,因为大部分用户图省事,以及基于自身的技术问题和常见可视化的习惯,还是喜欢用WEB面板安 ...

  3. 老蒋谈建站不选择免费空间/主机的3个理由

    老蒋谈建站不选择免费空间/主机的3个理由  2016-12-06 14:00   生活杂记   标签:个人网站   840    发表评论 每个月总会有那么几天有网友问老蒋是否有免费虚拟主机.VPS. ...

  4. Nginx重启时提示nginx: [emerg] bind() to 0.0.0.0解决方法 老蒋 发布于 2019-06-03 分类:运维笔记 评论(0) 2000+站长交流QQ群: 59

    c 老蒋 发布于 2019-06-03 分类:运维笔记 评论(0) 2000+站长交流QQ群: 594467847(资源和技术交流) 昨天下午老蒋在一台服务器中折腾迁移数据问题的时候,重启Nginx的 ...

  5. 数组里面都是人的名字,分割成:例如:老杨|老苏|老邹…”(老杨,老苏,老邹,老虎,老牛,老蒋,老王,老马)

    //数组里面都是人的名字,分割成:例如:老杨|老苏|老邹-"(老杨,老苏,老邹,老虎,老牛,老蒋,老王,老马) string[] names = {"老杨"," ...

  6. ZT看不懂的中国历史:老蒋的智力竟然在50之下

    好文一篇,看看好增强一下免疫力 看不懂的中国历史:老蒋的智力竟然在50之下

  7. python利用列表计算斐波那契数列前30项并输出_python 题目:斐波那契数列计算;题目:站队顺序输出;题目:合法括号组合的生成;题目:用户登录(三次机会)...

    斐波那契数列计算 B 描述 斐波那契数列如下: F(0) = 0, F(1) = 1 F(n) = F(n-1) + F(n-2) 编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波 ...

  8. 老蒋征婚启示啊啊啊啊啊啊

    蒋维东,哈哈哈哈 壮男 征婚公告 转载于:https://www.cnblogs.com/daixh/p/11093519.html

  9. 奥运会倒计时,老蒋作品,

    这破事还有200多天才完呐 转载于:https://www.cnblogs.com/liugod/archive/2008/01/27/1054759.html

最新文章

  1. q-LDPC实验进展
  2. 硬盘为何会丢失数据?
  3. 软件测试2019:第一次作业
  4. 重建包含快照的vmdk描述文件。
  5. 在阿里写了8年代码后,我才明白这些道理
  6. opnet平台中切换模块的理解——切换的建模
  7. hook控制浏览器的方法_Java-Hook技术-入门实践+反射、动态代理、热修复再看看
  8. Gateway源码分析
  9. linux中paste的用法,在Linux中使用Paste命令来合并行,包括使用Paste命令技巧及注意事项...
  10. DotNet微信公众号简介
  11. 关于跨平台技术选型的思考
  12. 解决 Exchange 2013提示“出现意外错误,无法处理您的请求”,无法打开OWA和ECP...
  13. Linux 如何限制用户的磁盘使用量 -- quota
  14. @@HOW TO:检查 MDAC 版本
  15. python无限锁屏_定时锁屏程序,Python祝你原理猝死!
  16. 从JDK 6升级到JDK 7过程中遇到的一个问题
  17. 『实用教程』四种超实用的超级记忆法以及记忆训练案例
  18. u盘中毒文件为html文档,U盘中毒后文件夹被隐藏的恢复方法
  19. Unity3D发布微信小程序
  20. introduction与related work

热门文章

  1. xss labs 挑战之旅
  2. 多模态机器学习基础、应用及预训练模型介绍
  3. python 图书管理_Python-图书管理系统
  4. 新版标准日本语高级_第3课
  5. 【学习笔记】第五章 线性规划
  6. 存储故障时的ORA-7445错误
  7. 无秘借道“友秘”上架苹果商店
  8. 服务器操作系统win2008如何打补丁,如何安装win server 2008 r2 sp1补丁?
  9. VPB和OSGGIS安装
  10. HTML网页设计文件的组成