Chiaki Sequence Revisited HDU - 6304 lowbit找规律法
Chiaki would like to know the sum of the first n terms of the sequence, i.e. ∑i=1nai. As this number may be very large, Chiaki is only interested in its remainder modulo (109+7).
The first line contains an integer n (1≤n≤1018).
1
2
3
4
5
6
7
8
9
10
2
4
6
9
13
17
21
26
32
思路
先对aiai打表找一下规律会发现每个数字出现的个数有如下的关系
12345678⋮12131214⋮
1122314351627184⋮⋮
思考一下就会发现对于数字ii他出现的个数是ii转化为二进制后最后一位1在位置,也就是
log2(lowbit(i))+1log2(lowbit(i))+1,我们把这个函数记作f(i)=log2(lowbit(i))+1f(i)=log2(lowbit(i))+1
接下来我们要解决的问题是给你nn如何求出anan,我们记f(i)f(i)的前缀和为g(i)g(i),如果知道了n刚好大于下标为ii的前缀和就可以确定anan是哪一个数了,前缀和g(i)g(i)是一个递增的函数,所以我们可以用二分的方法求出ii的值,下面的问题是然后求得g(i)g(i)的表达式
关于f(i)f(i)有两性质
{f(2i+1)=1f(2i)=f(i)+1
{f(2i+1)=1f(2i)=f(i)+1
利用这两个性质我们可以对g(n)g(n)进行化简
g(2n)=∑i=12nf(i)
g(2n)=∑i=12nf(i)
=∑i=1nf(2i)+∑i=0n−1f(2i+1)
=∑i=1nf(2i)+∑i=0n−1f(2i+1)
=n+∑i=1n(f(i)+1)
=n+∑i=1n(f(i)+1)
=∑i=1nf(i)+2n
=∑i=1nf(i)+2n
=g(n)+2n
=g(n)+2n
即g(n)=g(n2)+ng(n)=g(n2)+n
也就是说我们如果知道下标ii我们就可以就可以通过递归求出前缀和,有了前缀和的求解方式我们就可以通过二分来找出数字nn所对应的anan的值了,也就是第anan项的前缀和
那么我们找到了anan又如何求出和SnSn呢,我们先观察函数g(an)g(an)的值
g(an)=11+22+31+43+51+62+71+84+91+102⋯⋯
12345678910⋯g(an)=1+2+1+3+1+2+1+4+1+2⋯
我们已经知道了最后一项也就是anan的值,那我们观察一下会发现一些等差数列
12436125102071428⋮91836⋯⋯⋯∗1∗2∗3
13579⋯∗126101418⋯∗2412202836⋯∗3⋮
也就是是每个数字出现的个数都符合一个等差数列的关系,设求出的anan的值为xx
那么每一个等差数列的项数就为x−2i−12i+1x−2i−12i+1,其中ii代表是哪一个数列,那么我们就可以求得数列的末项然后用等差数列求和公式就可以求出小于anan中出现的数的和了,然后每个序列又有一个出现次数,再乘上这个序列出现的次数就可以得到最后的答案了
注意的是二分答案的时候为了不TLE要在n2n2的附近查找,序列的规律是除第一项之后的数的规律,所以一开始n-1,最后的答案再加上这个1
Chiaki Sequence Revisited HDU - 6304 lowbit找规律法的更多相关文章
- 2018 杭电多校1 - Chiaki Sequence Revisited
题目链接 Problem Description Chiaki is interested in an infinite sequence $$$a_1,a_2,a_3,...,$$$ which i ...
- HDU 6304 Chiaki Sequence Revisited
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=6304 多校contest1 Problem Description Chiaki is int ...
- HDU - 6304(2018 Multi-University Training Contest 1) Chiaki Sequence Revisited(数学+思维)
http://acm.hdu.edu.cn/showproblem.php?pid=6304 题意 给出一个数列的定义,a[1]=a[2]=1,a[n]=a[n-a[n-1]]+a[n-1-a[n-2 ...
- 【HDOJ6304】Chiaki Sequence Revisited(数学)
题意:给定一个序列a,定义a[1]=a[2]=1,a[n]=a[n-a[n-1]]+a[n-1-a[n-2]](n>=3),求该序列的前n项和是多少,结果对 1e9+7 取模 n<=1e1 ...
- [HDU6304][数学] Chiaki Sequence Revisited-杭电多校2018第一场G
[HDU6304][数学] Chiaki Sequence Revisited -杭电多校2018第一场G 题目描述 现在抛给你一个数列\(A\) \[ a_n=\begin{cases}1 & ...
- hdu 1005 Number Sequence(矩阵快速幂,找规律,模版更通用)
题目 第一次做是看了大牛的找规律结果,如下: //显然我看了答案,循环节点是48,但是为什么是48,据说是高手打表出来的 #include<stdio.h> int main() { ], ...
- B - Sequence II (HDU 5147)
Long long ago, there is a sequence A with length n. All numbers in this sequence is no smaller than ...
- hdu acm 2082 找单词
找单词 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- Bestcoder13 1003.Find Sequence(hdu 5064) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5064 题目意思:给出n个数:a1, a2, ..., an,然后需要从中找出一个最长的序列 b1, b ...
随机推荐
- Kafka安装之二 在CentOS 7上安装Kafka
一.简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这 ...
- python打印图形大全(详解)
,): shixin=chr() print(shixin) -------------------结果:2) for i in range(0,10): shixin=chr(9679) print ...
- TCP的三次握手(建立连接)和四次挥手(关闭连接)(转)
转自:(http://www.cnblogs.com/Jessy/p/3535612.html) 参照: http://course.ccniit.com/CSTD/Linux/reference/f ...
- C#中的Split用法以及详解
一.String.Split方法提供了如下6个重载函数: 名称 说明 String.Split (Char[]) 返回包含此实例中的子字符串(由指定 Char 数组的元素分隔)的 String 数组. ...
- Alpha 冲刺(7/10)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 学习MSI.CUDA 试运行软件并调试 ...
- 七周七语言之使用prolog解决爱因斯坦斑马难题
如果你想获得更好的阅读体验,可以前往我在 github 上的博客进行阅读,http://lcomplete.github.io/blog/2013/06/28/sevenlang-prolog/. 目 ...
- MySQL 基于xtrabackup备份—热备工具
xtrabackup(仅对InnoDB存储引擎支持热备) percona公司开发 改进的MySQL分支:percona-server 存储引擎改进:InnoDB —> XtraDB 使用本地的R ...
- 设计模式--Restful笔记(一)
一.REST基础概念 首先REST是 Representational State Transfer 的缩写,如果一个架构符合REST原则,它就是RESTful架构. 在REST中的一切都被认为是一种 ...
- 关于java读取excle文件的相关方法 ;
1.读取Excle文件内容的方法 拿过来可以直接用 : 2.参照 http://www.anyrt.com/blog/list/importexcel.html#6 更多知识请参考:http://ww ...
- IDEA设置头注释—自定义author和date
IDEA设置头注释,自定义author和date的方法如下所示: 去掉波浪线的方式:鼠标选中单词 --> 点击鼠标右键 --> spelling --> save 'xxx' to ...