AC日记——3的幂的和 51nod 1013
2024-09-26 23:16:09
思路;
矩阵快速幂;
sn-1 3 1 sn
* =
1 0 1 1
来,上代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define mod 1000000007 struct NodeType {
long long a[][];
};
struct NodeType ans; long long n; struct NodeType mul(NodeType pos)
{
NodeType res;
res.a[][]=,res.a[][]=;
res.a[][]=,res.a[][]=;
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
for(int v=;v<=;v++)
{
res.a[i][j]=(res.a[i][j]+(pos.a[i][v]*pos.a[v][j])%mod)%mod;
}
}
}
return res;
} void poww(int mi)
{
NodeType pos;
pos.a[][]=,pos.a[][]=;
pos.a[][]=,pos.a[][]=;
while(mi>)
{
struct NodeType res;
res.a[][]=,res.a[][]=;
res.a[][]=,res.a[][]=;
if(mi&)
{
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
for(int v=;v<=;v++)
{
res.a[i][j]=(res.a[i][j]+(ans.a[i][v]*pos.a[v][j])%mod)%mod;
}
}
}
ans=res;
}
pos=mul(pos),mi=mi>>;
}
} int main()
{
scanf("%lld",&n);n--;
ans.a[][]=,ans.a[][]=;
ans.a[][]=,ans.a[][]=;
poww(n);
cout<<(ans.a[][]+ans.a[][])%mod;
return ;
}
最新文章
- Java基础——继承、接口
- CSS的5种常用的垂直居中的方法
- iOS逆向工程资料
- 自己签发免费ssl证书
- 获取、增加、修改、删除sqlserver字段描述
- ARM处理器的寄存器,ARM与Thumb状态,7中运行模式 【转】
- Android studio gradle 打包 那些事
- CodeForces 709A Juicer (水题, 模拟)
- javascript笔记——label包含的自定义按钮选中
- django form关于clean及cleaned_data的说明 以及4种初始化
- underscore demo
- java获取对象属性类型、属性名称、属性值 【转】
- Git之路——Git的使用
- UML作业第二次:类在类图中的表示
- 服务器安装SSH服务:
- 配置VLAN
- 【原创】驱动枚举之EnumServicesStatusEx
- CentOS 7 输入中文 &; 安装搜狗输入法
- asp.net core下的如何给网站做安全设置
- rds下载备份集