Codeforces 392C Yet Another Number Sequence

CF392C & Yet Another Number Sequence 题解 纪念一下完全凭借自己想出来的的第一道黑题。 阅读详情

题目链接:http://codeforces.com/problemset/problem/392/C

题目简述:

F1 = 1, F2 = 2, Fi = Fi - 1 + Fi - 2 (i > 2).

We'll define a new number sequence Ai(k) by the formula:

Ai(k) = Fi × ik (i ≥ 1).

In this problem, your task is to calculate the following sum: A1(k) + A2(k) + ... + An(k). The answer can be very large, so print it modulo1000000007 (109 + 7).

 (1 ≤ n ≤ 1017; 1 ≤ k ≤ 40).


Then:

挺有意思的题。。。挺有意思。。真有意思。
如果我做这道题之前就写过什么矩阵递推总结。
这题很有启发性啊,就是因为这个题才让我有写那个东西的想法。

一看肯定是矩阵,然后呢?然后就真的没有然后了。


怎么构造转移矩阵。初始矩阵又是什么。根本不知道。

从头开始想吧, 如果有了AiK的递推,那求和肯定就不是问题(总结里写过)。
矩阵可以解决线性递推。
那么我们肯定要先把Ai(k)这个式子变成一个递推式,而不是通项。! 这是本题的关键啊!!!(当然只是我以为)
下面就考虑如何变形:

A_{i}(K)\\
=F_{i}*i^K \\
=(F_{i-1}+F_{i-2})*i^K\\
=F_{i-1}*i^K+F_{i-2}*i^K\\
=F_{i-1}*[(i-1)+1]^K+F_{i-2}*[(i-2)+2]^K\\
=\sum_{j=0}^{K} {\binom{K}{j}*F_{i-1}*(i-1)^j}+\sum_{j=0}^{K} {\binom{K}{j}*2^{K-j}*F_{i-2}*(i-2)^j}\\
=\sum_{j=0}^{K} {\binom{K}{j}*A_{i-1}(j)}+\sum_{j=0}^{K} {\binom{K}{j}*2^{K-j}*A_{i-2}(j)}\\

然后我们就得到了一个 A i ( k ) 的递推式。
考虑怎么建立初始矩阵:

这样的矩阵才能记录完信息,
我最开始竟然建成两行,是不是沙茶。 两行怎么推。
转移矩阵是2*K+1的,
系数在上面的式子已经很清楚了,都是些组合数或者组合数乘2的幂。
不方便打出来啊。。太难打了。。

然后就是代码实现的问题了。。
像我这样建立矩阵,恶心到死。
哎,反正建立矩阵超级恶心啊,后面都不是事儿了。
#include <cstdio>
#include <cstring>
#include <algorithm>
#define rep(i,l,r) for (int i=l;i<=r;++i)
#define per(i,r,l) for (int i=r;i>=l;--i)
typedef long long LL;
const LL MOD=1000000007;
const int MAX_K=45;
struct Matrix{
	LL a[MAX_K*2][MAX_K*2],n,m;
	Matrix(int _n = 0,int _m = 0):n(_n),m(_m){rep(i,1,n)rep(j,1,m) a[i][j]=0;}
	void dw(int _n,int _m){n=_n,m=_m;rep(i,1,n)rep(j,1,m) a[i][j]=(i==j?1:0);}
	LL& operator ()(int i,int j){return a[i][j];}
	void print(){
		rep(i,1,n) rep(j,1,m) printf("%I64d%c",a[i][j],j==m?'\n':' ');
		}
};
Matrix operator *(Matrix a,Matrix b){
	Matrix res(a.n,b.m);
	rep(i,1,a.n) rep(j,1,b.m) rep(k,1,a.m)
		(res(i,j)+=a(i,k)*b(k,j))%=MOD;
	return res;
}
Matrix operator ^(Matrix a,LL x){
	Matrix res;res.dw(a.n,a.m);
	for (;x;a=a*a,x>>=1)
		if (x&1) res=res*a;
	return res;
}
LL pow2[MAX_K*2];
LL c[MAX_K*2][MAX_K*2];
void getC(int x){
	c[0][0]=1;pow2[0]=1;
	rep(i,1,x){
		c[i][0]=1;pow2[i]=(pow2[i-1]*2)%MOD;
		rep(j,1,i) c[i][j]=(c[i-1][j-1]+c[i-1][j])%MOD;
		}
}
LL n,k;
int main(){
	scanf("%I64d%I64d",&n,&k);
	getC(k);
	Matrix a(1,2*k+3),dp(2*k+3,2*k+3);
//	rep(i,1,k+1) a(1,i)=1;
	rep(i,1,k+1) a(1,i)=2*pow2[k-i+1];
	rep(i,k+2,2*k+2) a(1,i)=1;
	a(1,2*k+3)=1;
	rep(i,1,k+1) rep(j,1,i) dp(i,j)=c[k-j+1][k-i+1];
	rep(i,k+2,2*k+2) rep(j,1,i-(k+1))
		dp(i,j)=pow2[i-(k+1)-1-(j-1)]*c[k-j+1][k-(i-(k+1))+1]%MOD;
	//rep(i,1,k+1) rep(j,1,k-(i-1)+1) dp(i,j)=c[k-j+1][i-1];
	//rep(i,k+2,2*k+2) rep(j,1,k-(i-(k+1)-1)+1)
	//	dp(i,j)=(pow2[k-(i-(k+1)-1)-(j-1)]*c[k-j+1][i-(k+1)-1])%MOD;
	rep(i,k+2,2*k+2) dp(i-(k+1),i)=1;
	dp(1,2*k+3)=dp(2*k+3,2*k+3)=1;
//	dp.print();
//	a.print();
	a=a*(dp^(n-1));
//	a.print();
	printf("%I64d\n",a(1,2*k+3));
}


总结下吧:

矩阵递推,当然要求出递推式。。然后问题就迎刃而解了。

Codeforces 392 C.Yet Another Number Sequence 这题构思比较巧妙,我看网上大部分都讲得模模糊糊,估计是 MarkdownMarkdownMarkdown 不太会用,我就详细写一下,方便大家理解???? 首先通过二项式定理 (i+1)k=Ck0i0+Ck1i1+⋯+Ckkik(i+1)^k=C_k^0i^0+C_k^1i^1+\cdots+C_k^ki^k(i+1)k=Ck0​i0+Ck1​i1+⋯+Ckk​ik 推出: [Fi(i+1)0Fi(i+... 阅读详情

相关推荐

主板USB接口全部失效解决方案(通用串行总线USB控制器有黄色叹号)保姆级教程亲测有效

通用串行总线控制器总是有叹号解决办法 办公室的崩腾时代老电脑,疫情期间没人用,来了开机之后发现鼠标键盘都用不了,本以为是主机放时间长出了问题,后来想起来就百度了“鼠标键盘都失效”的标题,结果发现了“串行总线控制器总是感叹号”的关联问题。正好办公室电脑都装有teamviwer常用来远程办公(在家偷懒)。所以通过远程发现电脑室可以运行的。并在控制面板发现:通用串行总线控制器总是感叹号,插入外设时USB无反应。如图:​ 并且右键选中其中一个,点击最后一个选项:“属性” 可以发现“设备状态”中会提示“由...

xiao_bai_0_0的博客 2万+

Codeforces 392C Yet Another Number Sequence 题解&代码

这道题!我推了四个小时!公式! 不是这题真的好打击智商啊…实话,我看着别人十几分钟推完一脸轻松就觉得该AFO 好悲伤啊…数学能力果然差没得救(i+1)^k=C(k,k)(i^k)+C(k,k-1)(i^(k-1))……+C(k,0)(i^0) Ai(k)=Fi×(i^k)=F(i-1)(i^k)+F(i-2)(i^k) 设: u(i,k)=F(i)(i^k)=∑C(k,j)((i-1)^j

Rainbow6174's home 868

一文解读DeepSeek训练数据集

本文重点以DeepSeek为例,详细介绍预训练数据集相关内容。大语言模型LLM(如DeepSeek、ChatGPT、文心一言等)的“智慧”源于它们学习的海量数据集。简单来说,数据集就是模型的“知识库”,通常由互联网公开的文本、图片、视频等。这些数据需满足两个特点:规模大和多样性。规模大是指数据量可达千亿级词汇,让模型学习复杂规律;多样性则涵盖多领域(如科技、文学)、多语言、多形式(对话、新闻),帮助模型适应不同场景。例如,训练数据中既有百科知识,也有日常对话,模型才能既解答专业问题,又能闲聊。

u013891230的博客 7089

Codeforces 392C Yet Another Number Sequence(矩阵快速幂)

题目链接:Codeforces 392C Yet Another Number Sequence 题目大意:给出n和k,表示一个序列A[i],求前n项A[i]的和,结果可以% 1e9+7。 A[i] = i^k * F[i],F[i] = F[i-1] + F[i-2](斐波那契数列)。 解题思路:首先(i+1)^k = C(k,k) * i ^ k + C(k, k-1)

不慌不忙、不急不躁 2380

【机器学习】实验2,基于回归分析的大学综合得分预测(完整代码实现+分析)

大学排名是一个非常重要同时也极富挑战性与争议性的问题,一所大学的综合实力涉及科研、师资、学生等方方面面。目前全球有上百家评估机构会评估大学的综合得分进行排序,而这些机构的打分也往往并不一致。在这些评分机构中,世界大学排名中心(Center for World University Rankings,缩写CWUR)以评估教育质量、校友就业、研究成果和引用,而非依赖于调查和大学所提交的数据著称,是非常有影响力的一个。

高丽大学人工智能硕士在读|专注大模型、RAG、OCR与AI工程实践 1974

DRAM内存模拟持久化设备的方法

由于持久化内存介质NVM技术的发展,越来越多的科研工作者投身到NVM相关的研究当中。但由于目前工业界并没有推出广泛使用的NVM介质设备,所以科研工作都需要自己以现有的条件,模拟NVM设备使用场景。一个简单的方法是:通过修改DRAM模拟器,达到模拟NVM的目的(可以参考:DRAMSim2模拟器分析与应用)。更高端的方式是:在真实系统中,将内存划分出一块儿,用来模拟NVM设备(类似于传统的ramdis

酷炫人笨笨熊 1899

CodeForces-392C Yet Another Number Sequence

用牛顿二项式定理转化递推式,再用矩阵快速幂求解 太菜了,看了别人的题解:https://www.cnblogs.com/simplekinght/p/6674256.html #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; #include&lt...

wl16wzl的博客 259

从平衡车到寻迹小车:IMU963RA九轴陀螺仪实战避坑与四元数融合指南

本文详细解析了IMU963RA九轴陀螺仪在机器人姿态控制中的应用,重点探讨了从六轴升级到九轴系统的技术路径及四元数融合算法。通过实战案例,揭示了如何利用地磁计补偿陀螺积分漂移,并提供硬件集成、传感器校准及算法实现的完整解决方案,有效将8小时漂移控制在2度以内。

weixin_27219587的博客 254

Codeforces 392 C Unfair Poll(模拟)

题意:老师点名顺序规则如下:第1排,第2排,……,第n-1排,第n排,第n-1排,……,第2排,第1排,第2排,……,第n-1排,第n排,……对于每排都是从左到右依次点名,问点名k个人后,所有人中最多的点名次数,最少的点名次数,以及位于x排y列处的同学的点名次数。 分析: 1、由于k很大,将第1排,第2排,……,第n-1排,第n排,第n-1排,……,第2排看成一个循环。 2、这个循...

Cherrychan2014的博客 180

华为OD机考双机位C卷 - AI处理器组合 (Java & Python & JS & GO & C++ & C)

> 2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 华为OD机试双机位C卷真题目录点击查看: [【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)](https://blog.csdn.net/banxia_frontend/article/details/155503868)

算法大师! 233

pytorch 51 GroundingDINO模型导出tensorrt并使用c++进行部署,53ms一张图

博主基于https://github.com/hpc203/GroundingDINO-onnxrun项目分享的onnx c++推理代码,修改为GroundingDINO模型的tensorrt推理代码。对于600x400的输入,在3060显卡下,cuda 12.1,TensorRT-10.4.0,window环境下53ms处理完一张图片。

a486259的博客 1221

[矩阵快速幂] CodeForces 392C Yet Another Number Sequence

题意: 题目意思很明朗~ 思路: A(n+1)=F(n+1)*(n+1)^k A(n)=F(n)*(n)^k A(n-1)=F(n-1)*(n-1)^k 这里拿k=2来举例 A(n+1)=F(n)*(n+1)^2+F(n-1)*(n+1)^2 对于A(n+1)发现可以由A(n)和A(n-1)得到 实际上就是多了 2*n+1个F(n) 和4*n个F(n-1) 其实就是n^k ->

Enmity_Dark 943

PyTorch深度学习项目实战100例数据集

最近很多订阅了的用户私信咨询有些数据集下载不了以及一些文章中没有给出数据集链接,为了解决这个问题,专门开设了本篇文章,提供数据集下载链接,打包100例的所有数据集。本专栏适用人群:深度学习初学者,专栏将具体讲解如何快速搭建深度学习模型用自己的数据集实现深度学习小项目。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 2万+

Codeforces 392 C. Yet Another Number Sequence

网上的题解都长的一模一样。。。然后干脆自己推了一下。

321

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Yet Another Number Sequence CodeForces - 392C 矩阵快速幂

题目链接:点我 Everyone knows what the Fibonacci sequence is. This sequence can be defined by the recurrence relation: F1 = 1, F2 = 2, Fi = Fi - 1 + Fi - 2 (i > 2). We'll define a new number sequence Ai(

wood 493

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Codeforces 392C. Yet Another Number Sequence

这里是题目地址 题目意思很简单,就是已知n,k计算: 其中是斐波那契数列第n-1项。n的范围是[1,1e17] ,k的范围是[1,40] 看了一下觉得是快速幂,不过计算能力蒟蒻,纸上划了一天才得到结果 _(:з」∠)_ 定义: 算一下: 这样就有了线性迭代式,然后可以构造矩阵出来: 然后用矩阵快速幂就可以搞定了。 1 #include <iostre...

weixin_30244681的博客 102

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

CodeForces 392 C.Yet Another Number Sequence(矩阵快速幂)

Description定义F1=1,F2=2,Fi=Fi−1+Fi−2(i≥3)F_{1}=1,F_{2}=2,F_{i}=F_{i-1}+F_{i-2}(i\ge 3)定义Ai(k)=Fi⋅ik(i≥1)A_{i}(k)=F_{i}\cdot i^k(i\ge 1)求A1(k)+A2(k)+...+An(k)A_{1}(k)+A_{2}(k)+...+A_{n}(k),结果模109+710^9+7

ZSQ 706

Codeforces 392C Yet Another Number Sequence (矩阵快速幂+二项式展开)

题意:已知斐波那契数列fib(i) ,给你n 和 k , 求∑fib(i)*ik (1<=i<=n) 思路:不得不说,这道题很有意思,首先我们根据以往得出的一个经验,当我们遇到 X^k 的形式,当 X 很大,k很小时,我们可以利用二项式定理进行展开,然后求出递推式在利用矩阵加速 推导过程: 已知 fib(1) = 1, fib(2) = 1,fib(i) = fib(...

179

CodeForces 392C Yet Another Number Sequence 矩阵快速幂

题意: \(F_n\)为斐波那契数列,\(F_1=1,F_2=2\)。 给定一个\(k\),定义数列\(A_i=F_i \cdot i^k\)。 求\(A_1+A_2+ \cdots + A_n\)。 分析: 构造一个列向量, \({\begin{bmatrix} F_{i-1}i^0 & F_{i-1}i^1 & \cdots & F_{i-1}i^k & F_{...

weixin_30602505的博客 81

Codeforces 392-C Yet Another Number Sequence (矩阵快速幂)

C. Yet Another Number Sequence time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Everyone knows what the ...

weixin_30781433的博客 117

Codeforces392 C. Yet Another Number Sequence(矩阵快速幂+二项式展开)

题目 Yet Another Number Sequence 题意 如题 分析 二项式展开递推公式,构造矩阵。关于矩阵快速幂的一般情况,请看Luo神的这篇文章。Latex的矩阵太难写了。。。 请看Acdreamers大佬的分析 代码 #include &lt;bits/stdc++.h&gt; using namespace std; typedef unsigned long ...

MasterAn的博客 428

【 CodeForces - 392C】 Yet Another Number Sequence (二项式展开+矩阵加速)

Yet Another Number Sequence Description Everyone knows what the Fibonacci sequence is. This sequence can be defined by the recurrence relation: F1 = 1, F2 = 2, Fi = Fi - 1 + Fi - 2(i &g...

weixin_30897233的博客 175
上一篇: set.cpp/c/pas
下一篇: 数位DP/数位统计 初探
sdogsq
博客等级 码龄18年 11粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值