题目链接

题目

题目描述

qn是个特别可爱的小哥哥,qy是个特别好的小姐姐,他们两个是一对好朋友 [ cp (划掉~)

又是一年嘤花烂漫时,小qn于是就邀请了qy去嘤花盛开的地方去玩。当qy和qn来到了田野里时,qy惊奇的发现,嘤花花瓣以肉眼可见的速度从树上长了出来。

仔细看看的话,花瓣实际上是以一定规律长出来的,而且,每次张成新的花瓣的时候,上一次的花瓣就会都落到地上,而且不会消失。

花瓣生长的规律是,当次数大于等于2时,第i次长出来的花瓣个数和上一次张出来的花瓣个数的差是斐波那契数列的第i-1项。初始的时候地上没有花瓣,树上的花瓣个数为1,第一次生长的花瓣个数为1。初始的那个花瓣就落到了地上

现在,小qn想知道,经过k次生长之后,树上和地上的总花瓣个数是多少?

ps:斐波那契数列:

​ f[1]=f[2]=1;f[i]=f[i-1]+f[i-2] (i>=2且i ∈ N+)

输入描述

一行一个数k

输出描述

一行一个数m,表示第k次生长过后,树上和地上的总花瓣数是多少。由于答案会很大,请你将答案mod 998244353后输出

示例1

输入

4

输出

12

说明

第一次:树上1,地上1.第二次树上2,地上1+1,第三次树上3,地上1+1+2,第四次树上5,地上1+1+2+3。总共12个

示例2

输入

5

输出

20

说明

第五次树上8,地上1+1+2+3+5。总共20个

备注

对于0%的数据,有k=样例

对于20%的数据,有k<=1'000

对于60%的数据,有k<=1'000'000

对于80%的数据,有k<=1'000'000'000

对于100%的数据,有k<1'000'000'000'000'000'000

题解

知识点:运算优化,线性代数。

设 \(f(i)\) 表示第 \(i\) 次长出来的花瓣数,\(g(i)\) 表示第 \(i\) 次生长后花瓣总数, \(F(i)\) 表示斐波那契数列第 \(i\) 项。

显然,有如下转移:

\[\begin{aligned}
\begin{pmatrix}
1 &1 &0 &0\\
0 &1 &1 &0\\
0 &0 &1 &1\\
0 &0 &1 &0\\
\end{pmatrix}
\begin{pmatrix}
g(i)\\
f(i+1)\\
F(i+1)\\
F(i)\\
\end{pmatrix}
=
\begin{pmatrix}
g(i+1)\\
f(i+2)\\
F(i+2)\\
F(i+1)\\
\end{pmatrix}
\end{aligned}
\]

我们使用矩阵快速幂优化,有如下等式:

\[\begin{aligned}
\begin{pmatrix}
1 &1 &0 &0\\
0 &1 &1 &0\\
0 &0 &1 &1\\
0 &0 &1 &0\\
\end{pmatrix}^k
\begin{pmatrix}
g(0)\\
f(1)\\
F(1)\\
F(0)\\
\end{pmatrix}
=
\begin{pmatrix}
g(k)\\
f(k+1)\\
F(k+1)\\
F(k)\\
\end{pmatrix}
\end{aligned}
\]

时间复杂度 \(O(\log k)\)

空间复杂度 \(O(1)\)

代码

#include <bits/stdc++.h>
using namespace std;
using ll = long long; struct Matrix {
const static int P; int n, m;
vector<vector<int>> mat; Matrix(int _n = 0) :n(_n), m(_n), mat(_n + 1, vector<int>(_n + 1)) { for (int i = 1;i <= n;i++) mat[i][i] = 1; }
Matrix(int _n, int _m) :n(_n), m(_m), mat(_n + 1, vector<int>(_m + 1)) {}
Matrix(const vector<vector<int>> &_mat) :n(_mat.size() - 1), m(_mat[1].size() - 1), mat(_mat) {} friend Matrix operator*(const Matrix &A, const Matrix &B) {
Matrix ans(A.n, B.m);
if (A.m != B.n) return ans;
for (int i = 1;i <= A.n;i++)
for (int k = 1;k <= A.m;k++) //a.m == b.n
for (int j = 1;j <= B.m;j++)
ans.mat[i][j] = (ans.mat[i][j] + 1LL * A.mat[i][k] * B.mat[k][j]) % P;
return ans;
} friend Matrix operator^(Matrix A, ll k) {
Matrix ans(A.n);
while (k) {
if (k & 1) ans = ans * A;
k >>= 1;
A = A * A;
}
return ans;
} friend ostream &operator<<(ostream &os, const Matrix &A) {
for (int i = 1; i <= A.n; i++)
for (int j = 1; j <= A.m; j++)
os << A.mat[i][j] << " \n"[i != A.n && j == A.m];
return os;
}
}; const int P = 998244353;
const int Matrix::P = ::P; Matrix A(
{
{-1,-1,-1,-1,-1},
{-1, 1, 1, 0, 0},
{-1, 0, 1, 1, 0},
{-1, 0, 0, 1, 1},
{-1, 0, 0, 1, 0}
}
); Matrix B(
{
{-1,-1},
{-1, 1},
{-1, 1},
{-1, 1},
{-1, 0},
}
); int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
ll n;
cin >> n;
cout << ((A ^ n) * B).mat[1][1] << '\n';
return 0;
}

NC18987 粉嘤花之恋的更多相关文章

  1. 牛客OI赛制测试赛3 解题报告

    前话: 话说考试描述:普及难度. 于是想在这场比赛上涨点信心. 考出来的结果:Point:480     Rank:40 然而同机房的最好成绩是 510. 没考好啊!有点炸心态,D题一些细节没有注意, ...

  2. ISCTF 2022

    Re SigninReverse ida 64 位 打开程序,即可获得flag ISCTF{27413241-9eab-41e2-aca1-88fe8b525956} ezbase # coding= ...

  3. TSCTF-J 2022 WP

    Re baby_xor 加密逻辑如上,密文动态调试,然后 Shift+E 导出密文[这样避免了手动获取] # encoding=utf-8 enc=[ 0x12, 0x00, 0x00, 0x00, ...

  4. NewStarCTF 公开赛 2022 RE WP

    Week 2 Re 前可见古人,后得见来者 chipher = [0x51, 0x5B, 0x4C, 0x56, 0x59, 0x4D, 0x50, 0x56, 0x54, 0x43, 0x7D, 0 ...

  5. Wave - 花たん 音乐

    Wave 歌手:花たん 所属专辑:Flower 間違えて宇宙終わって(宇宙因为一个错误而终结了) 青信号はいつも通り(通行的灯号一如往常的) 飛んでまた止まって(又再停止传播) また 飛びそうだ(然后 ...

  6. Java之恋

    初次见面那是一个河北的夏天风随沙散落天涯蝴蝶依旧恋着花回首走过的日子手指和键盘之间的梦想之光已恍如昨日 那年我还是一个刚踏进这个曾经只在地理课本上狂念南稻北麦,南油北花的土地那年你只是我必须要学的编程 ...

  7. 盛世狂欢意犹未尽之恋舞OL折扣平台多角度体验

    2018国民级时尚音乐舞蹈手游<恋舞OL>,女生都爱玩的手机游戏.画风Q萌的3D音乐舞蹈手游,多人同时在线,玩法轻松休闲,浪漫场景自由社交互动,恋上指尖舞蹈. 小编看了上述介绍之后,感觉已 ...

  8. 罗辑思维CEO脱不花:关于工作和成长,这是我的121条具体建议

    1 关于面对批评 01. 没有人对被批评感到高兴.如果有,TA撒谎. 02. 面对批评,得体的第一反应是“不急于解释,不反唇相讥”. 03. 每天,或者最长每周养成习惯,把自己存在的问题和造成的麻烦用 ...

  9. gitbook 入门教程之还在搞公众号互推涨粉?gitbook 集成导流工具,轻轻松松躺增粉丝!

    相信大多数博客作者都或多或少有过这样想法: 现在各种平台这么多,想要实现全平台发布就要到处复制粘贴,等我有空一定做统一平台一次性全部解决! 不知道正在阅读文章的你,有没有这样的想法? 反正我确实这么想 ...

  10. EZchip花1.3亿美元买Tilera然后以8亿美元把自己与Tilera一起卖掉

    2014年7月EZchip花1.3亿美元收购的Tilera2015年10 Mellanox 8亿美元收购EZchip,2016年1月完成.EZchip转手卖掉Tilera与自己? http://www ...

随机推荐

  1. 用线性二次模型建模大型数据中心,基于 MPC 进行冷却控制

    目录 一个总述 reviews 0 abstract 1 intro 2 related work 3 DC cooling(问题定义) 4 MPC(method) 4.1 Model structu ...

  2. Postman调试grpc

    转载请注明出处: 1.检查自己的postman是否支持 grpc,通过 File -> new -> ,出现如下图,则表示支持: 2.点击上图的grpc就会自动创建一个 grpc 的req ...

  3. 使用WTM框架创建博客系统后台并在云服务器发布

    阅读导航 关于lqclass.com 博客后台前后端部署 2.1 已部署访问链接 2.2 nginx 部署 2.2.1 后台后端发布 2.2.2 后台前端发布 2.2.3 云服务器部署 下次分享 1. ...

  4. AHB 局限性

    AHB's problem SoC bus 架构 AXI is used more and more 频率200M使用AHB,频率再升高就使用AXI AHB的问题 AHB协议本身限制要求较高,比如co ...

  5. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2024.01.08)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  6. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.30)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  7. [转帖]命令行参数--与-D的区别

    https://juejin.cn/post/7238420276228341815   Spring Boot 学习笔记 我们要想了解这两者之间的差异,首先来看一个案例:   bash 复制代码 # ...

  8. [转帖]Docker与k8s的恩怨情仇(四):云原生时代的闭源落幕

    https://zhuanlan.zhihu.com/p/388840887 在本系列前几篇文章中,我们介绍了从Cloud Foundry到Docker等PaaS平台的发展迭代过程.今天我们继续来为大 ...

  9. 各种数据库shell一键登录的方法

    各种数据库shell一键登录的方法 一个小场景 想通过shell 直接执行一些内容. 然后发现通过shell就可以. 所以这里总结一下 1. Oracle export ORACLE_HOME=/u0 ...

  10. [转帖]Kubernetes-17:Kubernets包管理工具—>Helm介绍与使用

    https://www.cnblogs.com/v-fan/p/13949025.html Kubernets包管理工具->Helm 什么是Helm? 我们都知道,Linux系统各发行版都有自己 ...