cout 和 printf 在 C++ 中的实现:四舍六入五随缘。比如 printf("%.0lf\n", x=1.5) => 1。

标准做法:printf("%d\n", (int)(x+0.5))

矩阵乘法

由 \(a_n=2a_{n-3}+a_{n-1}\) 得矩阵转移方程:

\[\begin{bmatrix} a_n & a_{n-1} & a_{n-2} \end{bmatrix} = \begin{pmatrix} 1 & 1 & 0 \\ 0 & 0 & 1 \\ 2 & 0 & 0 \end{pmatrix} \times \begin{bmatrix} a_{n-1} & a_{n-2} & a_{n-3} \end{bmatrix}
\]

这里采用 [] 表示 \(1\times 3\) 矩阵,() 表示 \(3\times 3\) 矩阵。

ll p[5][5], b[5][5], d[5][5], t[5][5];

memset(p, 0, sizeof p), memset(b, 0, sizeof b), memset(d, 0, sizeof d);
for (int i=1; i<=3; i++) b[i][i]=1ll; // unit matrix
p[1][1]=1ll, p[1][2]=1ll, p[1][3]=0ll;
p[2][1]=0ll, p[2][2]=0ll, p[2][3]=1ll;
p[3][1]=2ll, p[3][2]=0ll, p[3][3]=0ll; // transition matrix
d[1][1]=6ll, d[1][2]=1ll, d[1][3]=3ll; // initial matrix, a_3, a_2, a_1 // n<=3 特判
if (n<=3) {printf("%d\n", d[1][4-n]); return 0; } // 矩阵快速幂
int K=n-3;
while (K>0){
if (K&1) {
// (b) *= (p)
memset(t, 0, sizeof t);
for (int i=1; i<=3; i++)
for (int j=1; j<=3; j++)
for (int k=1; k<=3; k++)
t[i][j]=(t[i][j]+b[i][k]*p[k][j]) % mod;
memcpy(b, t, sizeof b);
} // (p) = (p)^2
memset(t, 0, sizeof t);
for (int i=1; i<=3; i++)
for (int j=1; j<=3; j++)
for (int k=1; k<=3; k++)
t[i][j]=(t[i][j]+p[i][k]*p[k][j]) % mod;
memcpy(p, t, sizeof p); K>>=1;
} // [t] = [d] * (b)
memset(t, 0, sizeof t);
for (int i=1; i<=3; i++)
for (int j=1; j<=3; j++)
t[1][i]=(t[1][i]+d[1][j]*b[j][i]) % mod;
printf("%lld\n", t[1][1]);

9-10 November的更多相关文章

  1. 各个版本 Windows 10 系统中自带的 .NET Framework 版本

    原文各个版本 Windows 10 系统中自带的 .NET Framework 版本 Windows 名称 Windows 版本 自带的 .NET Framework 版本 Windows 10 Oc ...

  2. centos各版本信息

    CentOS version Architectures RHEL base Kernel CentOS release date RHEL release date Delay (days) 2.1 ...

  3. 获取机器安装.NET版本的几种方式

    当调查应用程序问题时,通常需要先确认目标机器所安装的 .NET Framework 的版本.可以通过如下方式来确认版本号: 通过控制面板安装程序查询 通过查询注册表获取版本信息 通过查看安装目录获取版 ...

  4. SNMP进阶

    管理信息库:MIB 我们要扩展mib首先必须清楚mib是如何定义的,用的什么语言,有哪些约定,遵循哪些规则等等.这些基本东西掌握过后,我们就可以很轻松的来写自己的mib文件了. 所谓管理信息库,或者M ...

  5. Windows、VS 与 .net

    原文地址:https://msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx .NET Framework version CLR ver ...

  6. 检测电脑安装的net framework版本

    https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx To find .NET Framework versions by ...

  7. News: Visual Studio Code support debugging Linux Apps

    http://arstechnica.com/information-technology/2015/11/visual-studio-now-supports-debugging-linux-app ...

  8. PostgreSQL中initdb做了什么

    在使用数据库前,是启动数据库,启动数据库前是initdb(初始化数据库):一起来看一下initdb做了什么吧. 初始化数据库的操作为: ./initdb -D /usr/local/pgsql/dat ...

  9. ### Paper about Event Detection

    Paper about Event Detection. #@author: gr #@date: 2014-03-15 #@email: forgerui@gmail.com 看一些相关的论文. 1 ...

  10. authbind start tomcat services as user with less that 1024 ports. linux常规用户使用tomcat的80端口

    Start tomcat services using authbind this will allow user to start ports less than 1024 we do not ne ...

随机推荐

  1. 红帽学习笔记[RHCSA] 第五课[用户、权限相关]

    第五课 用户权限 查看文件的权限 [kane@localhost /]$ ll total 36 ----------. 1 root root 1751 Aug 22 20:58 ~ lrwxrwx ...

  2. 解决ie低版本不认识html5标签

    在不支持HTML5新标签的浏览器里,会将这些新的标签解析成行内元素(inline)对待,所以我们只需要将其转换成块元素(block)即可使用,但是在IE9版本以下,并不能正常解析这些新标签,但是却可以 ...

  3. 数塔 Easy

    在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?  已经告诉你了,这是个DP的题 ...

  4. win 10 自带 Ubuntu 系统的文件位置

    win 10 自带 Ubuntu 系统的文件位置 Ubuntu 作为最为流行 Linux 系统中的一种,是用来学习 Linux 相关知识是最好不过的选择.专门搞一个 Ubuntu 系统的电脑不太现实, ...

  5. MySQL---数据库切分

    3.切分 水平切分   水平切分又称为sharding,它是将同一个表的记录拆分到多个结构相同的表中.当一个表的数据不断的增加的时候,sharding是必然的选择,它可以将数据分布到集群的不同节点上, ...

  6. 要了解mysql原理,还是要心里有点B树才行

      要了解数据库索引的底层原理,我们就得先了解一种叫树的数据结构,而树中很经典的一种数据结构就是二叉树!所以下面我们就从二叉树到平衡二叉树,再到B-树,最后到B+树来一步一步了解数据库索引底层的原理! ...

  7. vscode 热部署 spring-mvc

    1.添加maven插件 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId> ...

  8. Docker其他操作:查看内部细节、IP、删除容器

    1.查看容器内部细节 查看容器运行内部细节,比如可看容器的IP docker inspect mycentos2 2.查看容器IP地址 直接显示IP地址 docker inspect --format ...

  9. win10系统中photoshop cs6中界面字体太小的解决方法

    win10系统中photoshop cs6中界面字体太小的解决方法 ps页面系统字体特别小,解决方法如下: 右键ps图标—属性—兼容性—勾选替代高dpi缩放行为,缩放执行选为默认,如果不行三个都试试

  10. 解决vuex数据页面刷新后初始化问题

    在vue项目的开发中经常会用到vuex来进行数据的存储,然而在开发过程中会出现刷新后页面的vuex的state数据初始化问题!下面是我用过的解决方法 利用storage缓存来实现vuex数据的刷新问题 ...