hdu_2276_构造矩阵_快速幂乘
来源:互联网 发布:vscode debug npm 编辑:程序博客网 时间:2024/05/17 04:14
/*
非递归的二分用3^n模拟,比如下面代码的p,a分别出现的是:3 3^2,3^3 3^4,3^7 3^8,3^15 3^16 ....3^i-1 3^i(i=2^k)
a1=(a1+an)%2
a2=(a1+a2)%2
a3=(a1+a2)%2.............ai=(a(i-1)+ai)%2;
有这种关系,我们想到用矩阵去运算,先要构造一个矩阵!
| 1 0 0 0 ....1 |
| 1 1 0 0.....0 |
| 0 1 1 0 ....0|
......
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
struct mat
{
int m[100][100];
};
int m;
int len;
mat product(mat a,mat b)
{
mat c;
int i,j,k;
memset(c.m,0,sizeof(c.m));
for(i=0;i<len;i++)
for(j=0;j<len;j++)
{
for(k=0;k<len;k++)
c.m[i][j]+=a.m[i][k]*b.m[k][j];
c.m[i][j]%=2;
}
return c;
}
mat div(mat a,int x) //如果用递归解决的话就爆内存,只能用非递归,而且还要注意用二分法,非递归的话可以用2^7模拟,
{
mat p; //p为单位矩阵
int i,j;
for(i=0;i<len;i++)
for(j=0;j<len;j++)
p.m[i][j]=(i==j);
while(x)
{
if(x&1)
p=product(p,a);
x>>=1;
a=product(a,a);
}
return p;
}
int main()
{
char s[100],ans[100];
mat a;
int c[100],d[100];
int i,j,k;
while(scanf("%d",&m)!=EOF)
{
scanf("%s",s);
len=strlen(s);
memset(a.m,0,sizeof(a.m));
a.m[0][len-1]=1;
for(i=0;i<len;i++)
for(j=0;j<len;j++)
if(i==j||i-1==j)
a.m[i][j]=1;
mat b;
b=div(a,m);
for(i=0;i<len;i++)
c[i]=s[i]-'0';
memset(d,0,sizeof(d));
for(i=0;i<len;i++)
for(j=0;j<len;j++)
d[i]=(d[i]+b.m[i][j]*c[j])%2;
for(i=0;i<len;i++)
ans[i]=d[i]+'0';
ans[len]='/0';
printf("%s/n",ans);
}
return 0;
}
- hdu_2276_构造矩阵_快速幂乘
- 杭电_hdu1757_矩阵解线性方程_快速幂乘
- poj 3735 Training little cats 构造矩阵+稀疏矩阵加速连乘+矩阵快速幂
- 快速矩阵幂乘算法
- 快速乘/快速幂/矩阵快速幂
- 快速乘 快速幂 矩阵快速幂
- 矩阵快速幂(矩阵连乘)
- 构造矩阵+矩阵快速幂
- ZOJ 3690 矩阵快速幂乘
- 模版—矩阵连乘快速幂
- 二分幂,快速幂,矩阵快速幂,快速乘
- 【个人模板】 快速幂取模,矩阵快速幂,快速乘
- hdu3306Another kind of Fibonacci(矩阵连乘&矩阵快速幂)
- 构造矩阵乘最优解
- 2875: [Noi2012]随机数生成器 (矩阵乘法,快速幂,快速乘)
- BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘
- BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘
- Codeforces621E 矩阵构造快速幂
- 比较各种装箱试探方法实现文件C语言
- 队列头文件C语言
- 队列实现文件C语言
- Discuz修改登录后跳转页面
- 关于Immediate属性的使用(注意)----ADF Faces入门(文档阅读)
- hdu_2276_构造矩阵_快速幂乘
- crux安装后记
- aaaaaaa
- 2011年1月20日,学习日记,面向对象(上)
- IBM HACMP 系列 -- 安装和配置一
- CArray,CMap,CList 速度比较
- 我的C++入门
- 在VC++中如何实现显示桌面的功能即全部最小化显示桌面(整理收集)
- 更改 Visual Assist Cache 存放目录