BZOJ_P4128 Matrix(矩阵乘法+快速幂+BSGS)
来源:互联网 发布:短网址源码 编辑:程序博客网 时间:2024/05/29 12:18
BZOJ传送门
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 337 Solved: 170
[Submit][Status][Discuss]
Description
给定矩阵A,B和模数p,求最小的x满足
A^x = B (mod p)
Input
第一行两个整数n和p,表示矩阵的阶和模数,接下来一个n * n的矩阵A.接下来一个n * n的矩阵B
Output
输出一个正整数,表示最小的可能的x,数据保证在p内有解
Sample Input
2 7
1 1
1 0
5 3
3 2
Sample Output
4
HINT
对于100%的数据,n <= 70,p <=19997,p为质数,0<= A_{ij},B_{ij}< p
保证A有逆
Source
BSGS裸题,拿矩阵算即可
#include<cstdio>#include<cmath>#include<map>#include<vector>#include<iostream>using namespace std;typedef vector<int> vec;typedef vector<vec> mat;int n,p;mat mul(mat &A,mat &B){ mat C(n,vec(n)); for(int i=0;i<n;i++) for(int k=0;k<n;k++) for(int j=0;j<n;j++) C[i][j]=(C[i][j]+A[i][k]*B[k][j])%p; return C;}mat pow(mat A,int b){ mat res(n,vec(n)); for(int i=0;i<n;i++) for(int j=0;j<n;j++) res[i][j]="01"[i==j]-'0'; while(b){ if(b&1) res=mul(res,A); A=mul(A,A);b>>=1; } return res;}void print(mat &A){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) printf("%d%c",A[i][j]," \n"[j==n-1]); putchar('\n');}int main(){ scanf("%d%d",&n,&p); mat A(n,vec(n));mat B(n,vec(n)); for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&A[i][j]); for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&B[i][j]); int m=ceil(sqrt(p)); mat D(n,vec(n)); map<mat,int> mp;D=B;mp[D]=m+1; for(int j=1;j<m;j++){ D=mul(D,A); if(!mp[D]) mp[D]=j; } mat tmp(n,vec(n));tmp=pow(A,m); mat ine(n,vec(n)); for(int i=0;i<n;i++) for(int j=0;j<n;j++) ine[i][j]="01"[i==j]-'0'; for(int i=0;i<m;i++){ int j=mp[ine]; if(j){ printf("%d\n",j==m+1?i*m:i*m-j); break; } ine=mul(ine,tmp); } return 0;}
1 0
- BZOJ_P4128 Matrix(矩阵乘法+快速幂+BSGS)
- bzoj 4128: Matrix BSGS+矩阵乘法
- BZOJ 4128: Matrix BSGS 矩阵乘法
- BZOJ4128: Matrix 矩阵BSGS
- 矩阵乘法&&快速幂
- 矩阵乘法 矩阵快速幂
- 矩阵快速幂,矩阵加法,矩阵乘法
- BZOJ 4128 Matrix BSGS+矩阵求逆
- [BSGS 矩阵 随机化] BZOJ 4128 Matrix
- Matrix Power Series 矩阵乘法 二分快速幂http://poj.org/problem?id=3233
- POJ 3233 Matrix Power Series (矩阵乘法+快速幂+等比二分求和) -
- 【Matrix】矩阵乘法
- 矩阵乘法(Matrix Multiply)
- 矩阵乘法快速幂模板
- hdu5015233 Matrix 矩阵快速幂
- 矩阵的乘法和矩阵快速幂
- poj3070(矩阵快速幂,矩阵乘法)
- 矩阵乘法+快速幂——【模板】矩阵快速幂
- 总结一下 input propertychange
- 二分查找
- php无法用mail函数发送邮件之原因
- Java并发编程:线程池的使用
- iOS开发证书变成“此证书的签发者无效”解决方法
- BZOJ_P4128 Matrix(矩阵乘法+快速幂+BSGS)
- 梆梆SDKs详细分析-防界面劫持SDK
- MySQL 存储引擎
- c 文本文件拷贝
- FMDB数据库总结
- 关于sizeof(str)的问题
- asp.net利用Ajax和Jquery在前台向后台传参数并返回值,通过aspx.cs中的静态方法+WebMethod进行处理
- MTU 巨帧 TCP/UDP与分片
- 【Unity插件】NGUI核心组件之UIAnchor