题目

Input

一个整数n

Output

一行,一个整数,表示第0天到第n天的评估函数的值的和。

Sample Input

Input 1
5

Input 2
666666

Input 3
2147483648

Sample Output

Output 1
76

Output 2
324016098

Output 3
932937567
数据范围
70%:n<=106n
100%:n<=1018n

比赛时の想法

70%的递推还是很好想的吧,然而早就忘了矩阵乘法了233~

正解

首先递推式:F[i]:=F[i-1]+F[i-2]+f[i](可以自行分析一下连线的规律~)
那么我们设置一个5*5的矩阵的说我们可以设置一个5 *5的矩阵,然后快速幂一下就可以了

关于矩阵乘法

由于我忘记如何van矩阵乘法了,就在这里打一下方便以后看QAQ
首先初始状态是a,然后我们构建一个矩阵,使得a*b就等于a中的变量i+1后各个量的值。那么最终我们的答案就是a∗bna*b^n,我们知道,矩阵乘法是有结合律的,所以我们可以用快速幂求出bnb^n,然后再乘一个a就可以了。构建矩阵的话就找一下几个量之间的关系就好咯QAQ
感觉自己这方面有点辣鸡啊~
快速幂的时候有c[i,j]=a[i,k]*b[k,j] 如果a是一维的那么i就恒为1

贴代码

constmd=998244353;
vara:array[1..5]of int64=(1,0,1,0,1);cc:array[1..5]of int64;e,q:array[1..5,1..5]of int64;b:array[1..5,1..5]of int64=((1,1,0,0,1),(1,0,0,0,1),(1,0,1,1,1),(1,0,1,0,1),(0,0,0,0,1));l,x,n:int64;i,j,k:longint;
procedure quick;
vari,j,k:longint;
beginfillchar(e,sizeof(e),0);for i:=1 to 5 dofor j:=1 to 5 dofor k:=1 to 5 doe[i,j]:=(e[i,j]+b[i,k]*q[k,j]) mod md;b:=e;
end;
procedure quick1;
vari,j,k:longint;
beginfillchar(e,sizeof(e),0);for i:=1 to 5 dofor j:=1 to 5 dofor k:=1 to 5 doe[i,j]:=(e[i,j]+q[i,k]*q[k,j]) mod md;q:=e;
end;
beginreadln(n);x:=n;q:=b;dec(n);while n>0 dobeginif n mod 2=1 then quick;quick1;n:=n div 2;end;for j:=1 to 5 dofor k:=1 to 5 docc[j]:=(cc[j]+a[k]*b[k,j]) mod md;if x=0 then cc[5]:=1;writeln(cc[5]);
end.

【NOIP2016提高A组模拟9.24】天使的分裂相关推荐

  1. JZOJ 4798 【NOIP2016提高A组模拟9.24】天使的分裂

    天使的分裂 题目大意 同时满足 求 ∑ni=1Fi \sum_{i=1}^{n}F_i 数据范围 题解 题目很简单,但是看上去很难. 先将F的递推式推出来. 所以递推式为 Fn F_n= Fn−1 F ...

  2. 天使的分裂【NOIP2016提高A组模拟9.24】

    题目 Input 一个整数n Output 一行,一个整数,表示第0天到第n天的评估函数的值的和. Sample Input Input 1 5 Input 2 666666 Input 3 2147 ...

  3. JZOJ4798. 【NOIP2016提高A组模拟9.24】天使的分裂

    Description Input 一个整数n Output 一行,一个整数,表示第0天到第n天的评估函数的值的和. Sample Input Input 1 5 Input 2 666666 Inp ...

  4. 【NOIP2016提高A组模拟9.24】天使的分裂 (矩阵乘法)

    Description Input 一个整数n Output 一行,一个整数,表示第0天到第n天的评估函数的值的和. Sample Input Input 1 5 input 2 666666 Inp ...

  5. JZOJ 100024. 【NOIP2016提高A组模拟7.6】数球

    Description 小A有n个球,编号分别为1到n,小A每次都会从n个球中取出若干个球,至少取一个,至多取n个,每次取完再放回去,需要满足以下两个条件. 每次取出的球的个数两两不同. 每次取出的球 ...

  6. JZOJ4708. 【NOIP2016提高A组模拟8.20】奇洛金卡达 倒着做的思想+并查集维护

    题目大意 给定一个长度小于等于kk的字符串和qq,表示现在有qq个操作,每个操作给定两个参数li,ril_i,r_i表示把现在的字符串第lil_i到rir_i把其中编号为奇数的按顺序写下来,再在后面把 ...

  7. 【NOIP2016提高A组模拟9.9】闭门造车

    题目 自从htn体验了一把飙车的快感,他就下定决心要闭门造车!但是他两手空空怎么造得出车来呢?无奈的他只好来到了汽车零部件商店. 一走进商店,玲琅满目的各式零件看得htn眼花缭乱.但是他很快便反应过来 ...

  8. [JZOJ4788] 【NOIP2016提高A组模拟9.17】序列

    题目 描述 题目大意 一个序列,每次可以使一段区间内的所有数加一(模四). 问最少的操作次数. 思考历程 一看这题目,诶,这不就是那道叫密码锁的题目吗? 然后随便打一打,样例过了,就再也没有思考这一题 ...

  9. 5334. 【NOIP2017提高A组模拟8.24】空

    Description Input Output Sample Input 3 10 100 1 50 50 100 Sample Output 99 Data Constraint Solution ...

最新文章

  1. 如何限制只有某些IP才能使用Tomcat Manager
  2. 一文详解如何配置meld做git diff工具
  3. 几款最新的解谜单机小游戏
  4. 有人质疑面向对象编程?
  5. GridView内嵌DropDownList操作
  6. 使用SharedPreferences进行数据存储
  7. idea打包成jar包或war包
  8. linux deepin手动升级内核命令
  9. 查看mysql数据库历史_查看mysql数据库历史
  10. 科技战疫丨SENSORO灵思智能安全服务助力疫情防控
  11. 「leetcode」栈与队列:总结篇!
  12. java单元测试模拟输入_java – 单元测试:在定义模拟行为后调用...
  13. 【C/C++】Socket编程实例解析
  14. SpringBoot:EasyExcel动态字段(不创建对象)多sheet、多文件|压缩包格式导出
  15. java tld tag_自定义标签tag(jsp编写)和tld(java编写)的使用方法
  16. STM32F103C8T6+LD3320语音识别模块智能灯控
  17. 关于家里的宽带和无线wifi路由器的一些选择和配置
  18. MNIST在CPU、FPGA、ARM上的运行对比
  19. 将 字母 转换数字(1-26)
  20. CCCC 天梯赛-5-10 排座位

热门文章

  1. 初学整理(一)CMOS图像传感器(CMOS image sensor, CIS)基本介绍
  2. 幼儿-综合素质【7】
  3. 学习ISTQB基础级的正确姿势
  4. 高中物理中汽车恒定功率启动问题分析
  5. 《敏捷开发一千另一夜》 读后感1
  6. 第104篇 Compound 中的 cTokens
  7. 一位15年资深HR直言:裁掉35岁以上老程序员,早已是公开秘密
  8. 二维码如何转为链接,看了这篇文章才知道多好用!
  9. 零基础数据挖掘入门系列(三) - 数据清洗和转换技巧
  10. jpg转换成dwf的方式