题目描述:

有一个数列A={1,2,2,3,3,4,4,4,……}。数字i有A[i]个。

设F[i]表示数字i最后一次出现的位置。G[i]表示数字F[i]最后一次出现的位置,即G[i]=F[F[i]]。求G[i]。(i<=1e9),答案模1e9+7。有多组数据。

解题正确性证明:

根据定义F[i]=A[1]+A[2]+A[3]+……+A[i]。由此我们可以很方便地求出F[i]。我们甚至可以由G[i]=F[F[i]]求出G[i]。但是题目的i很大,F[i]更大,直接求G[i]不可能。

再推导G[i]-G[i-1]=A[1]+A[2]+A[3]+……+A[F[i]]-(A[I]+A[2]+A[3]+……+A[F[i-1]])

=A[F[i-1]+1]+A[F[i-1]+2]+……+A[F[i]]。

因为F[i-1]是i-1最后一次出现的位置所以A[F[i-1]+1]=A[F[i-1]+2]=A[F[i-1]+3]=……=A[F[i]]=i。

又因为F[i-1]+1到F[i]的个数是A[i]。

所以G[i]-G[i-1]=i*A[i]。

所以G[i]=1*A[1]+2*A[2]+3*A[3]+……+i*A[i]。

因为A[i]在某一段是连续的,确切地说A[F[A[i]-1]+1]=A[F[A[i]-1]+2]=A[F[A[i]-1]+3]=……=A[F[A[i]]=A[i]。

G[i]=F[1]*1+(F[1]+1)*2+F[2]*2+(F[2]+1)*3+F[3]*3+……

+(F[A[i]-1]+1)*A[F[A[i]]+(F[A[i]-1]+2)*A[F[A[i]]+……+i*A[F[A[i]]。

又因为{F[A[i]-1]+1,F[A[i]-1]+2,F[A[i]-1]+3,……,F[A[i]]}为等差数列。

所以G[i]=(F[0]+F[1]+1)*A[1]/2*1+(F[1]+F[2]+1)*A[2]/2*2+(F[2]+F[3]+1)*A[3]/2*3+……

+(F[A[i]-1]+i+1)*(i-F[A[i]-1])/2*A[F[A[i]]]。为了形式上的统一,这里假定F[0]=0。

这个等式中我们最多只用到了F[A[i]],当i很大时,A[i]远小于i,所以我们可以通过这个等式求出G[i]。

特别地,当i=F[A[i]]时,最后一段求和恰好也完整,此时有

G[i]=(F[0]+F[1]+1)/2*1+(F[1]+F[2]+1)*A[2]/2*2+(F[2]+F[3]+1)/2*3+……

+(F[A[i]-1]+F[A[i]]+1)*A[A[i]]/2*A[i]。因为有多组数据,所以我们先预处理出所有G[F[j]],1<=j<=A[i]。

转载于:https://www.cnblogs.com/JebediahKerman/p/6020681.html

最新文章

  1. mysql的判断更新_mysql判断记录是否存在,存在则更新,不存在则插入
  2. Git学习(1)-本地版本库的创建
  3. 组态王bitset用法_关于STEP7在组态王里定义I/O离散变量
  4. BZOJ 1831 逆序对
  5. Python学习(三十七)—— 模板语言之自定义filter和中间件
  6. React-如何在jsx中自动补全标签(vscode)
  7. Dev C++下载地址和安装教程(图解版)
  8. 两个月的一些工作总结
  9. 系统分析员、系统架构师、项目经理的区别
  10. 洛谷1156 垃圾陷阱
  11. 利用c语言绘制漫天星空-动画
  12. 基于Tofu的热红外、多波段目标识别跟踪系统
  13. 计算机与工作 生活的小论文,电脑与生活作文
  14. cad旋转命令_如何将CAD图形旋转至水平位置?
  15. 矩阵的最小路径和(Java)
  16. 创建Predix UAA(User Account and Authentication)
  17. tp-link wr 841n 300m 局域网限速的研究
  18. gitee码云的使用
  19. C#开发 VSTO 自定义功能开发Ribbon显示在任意窗格栏
  20. 计算机编程怎样打符号,在CAD中如何输入一些特殊符号?比如乘除、符号.

热门文章

  1. 我为什么用 SQLite 和 FMDB 而不用 Core Data
  2. 受损虚拟机的修复方法
  3. java单例模式和HashMap的线程安全
  4. WinXp怎么开机进入Dos
  5. EPCS 无法配置FPGA的解决方法以及JTAG、AS调试总结
  6. python boxplot用法_Boxplot的介绍和使用
  7. 扩展中断控制器8259实验_「正点原子FPGA连载」第十三章双核AMP实验
  8. matlab 均值滤波_数字图像处理基础 — 高斯滤波
  9. js 去重某个键值 数组对象_JS数组去重常见方法分析
  10. android 程序的目录,Android应用程序目录