hdu3306:Another kind of Fibonacci
2024-10-20 03:12:14
A(0)=A(1)=1,A(i)=X*A(i-1)+Y*A(i-2),求S(n)=A(0)^2+A(1)^2+A(2)^2+A(3)^2+……+A(n)^2。
这个矩阵有点毒。。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
//#include<iostream>
using namespace std; #define LL long long
LL n,x,y;
typedef LL mat[][];
mat a,f,ans;
const int mod=;
void copy(mat &a,mat b)
{
for (int i=;i<=;i++)
for (int j=;j<=;j++)
a[i][j]=b[i][j];
}
void mul(mat a,mat b,mat &ans)
{
mat t;memset(t,,sizeof(t));
for (int i=;i<=;i++)
for (int j=;j<=;j++)
for (int k=;k<=;k++)
t[i][j]=(t[i][j]+a[i][k]*b[k][j]%mod)%mod;
copy(ans,t);
}
void init(mat &a)
{
memset(a,,sizeof(a));
for (int i=;i<=;i++) a[i][i]=;
}
void pow(mat a,LL b,mat &ans)
{
mat tmp,last;copy(tmp,a);init(last);
while (b)
{
if (b&) mul(last,tmp,last);
mul(tmp,tmp,tmp);
b>>=;
}
copy(ans,last);
}
int main()
{
while (~scanf("%lld%lld%lld",&n,&x,&y))
{
memset(a,,sizeof(a));
a[][]=a[][]=a[][]=;
a[][]=x*x%mod;
a[][]=y*y%mod;
a[][]=*x*y%mod;
a[][]=x;a[][]=y;
f[][]=f[][]=f[][]=f[][]=;
pow(a,n,a);
mul(a,f,ans);
printf("%lld\n",ans[][]);
}
return ;
}
最新文章
- PHP遍历、删除文件夹中的所有文件
- 写了一个简易的GBK文件向UTF8文件转换的工具
- oracle常用系统表
- SP Flash Tool使用异常集锦
- SONATYPE NEXUS搭建MAVEN私服
- IplImage 与 QImage 相互转换
- 通过nginx配置文件抵御攻击
- iOS:BitCode的介绍
- number_format
- 如何进行shell脚本正确性测试
- Learn X in Y minutes(python一页纸代码)
- WC2015 冬眠营滚粗记
- FromData获取表单数据
- aic bic mdl
- Python 爬虫工具 —— fake_useragent
- hanlp在Python环境中的安装失败后的解决方法
- MapReduce中的分布式缓存使用
- XDU 1111
- nyoj27-水池数目 (求连通块数目)【dfs】
- iOS- 如何将非ARC的项目转换成ARC项目(实战)