BZOJ 4128 Matrix ——BSGS
矩阵的BSGS。
只需要哈希一下存起来就可以了。
也并不需要求逆。
#include <map>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define F(i,j,k) for (ll i=j;i<=k;++i)
#define D(i,j,k) for (ll i=j;i>=k;--i)
#define ll long long
#define base 231
#define basemd 1000000007 ll n,p; struct matrix{
ll x[80][80];
void init(){memset(x,0,sizeof x);}
matrix operator * (matrix a){
matrix ret;
ret.init();
F(i,1,n) F(j,1,n)
{
F(k,1,n) ret.x[i][j]=ret.x[i][j]+x[i][k]*a.x[k][j];
ret.x[i][j]%=p;
}
return ret;
}
ll encode()
{
ll ret=0;
F(i,1,n) F(j,1,n)
ret=(ret*base+x[i][j])%basemd;
return ret;
}
void read()
{
F(i,1,n) F(j,1,n)
scanf("%lld",&x[i][j]),x[i][j]%=p;
}
void build()
{init();F(i,1,n)x[i][i]=1;}
}A,B,E; map <ll,ll> mp; void BSGS()
{
mp.clear();
ll m=ceil(sqrt(p));
matrix ans;
F(i,0,m)
{
if (i==0){ans=B;mp[ans.encode()]=i;continue;}
ans=ans*A;
mp[ans.encode()]=i;
}
matrix tmp=E;
F(i,1,m) tmp=tmp*A; ans=E;
F(i,1,m)
{
ans=ans*tmp;
if (mp[ans.encode()])
{
ll ret=i*m-mp[ans.encode()];
printf("%lld\n",(ret%p+p)%p);
return ;
}
}
} int main()
{
scanf("%lld%lld",&n,&p);
A.read();B.read();E.build();
BSGS();
}
BZOJ 4128 Matrix ——BSGS的更多相关文章
- bzoj 4128: Matrix ——BSGS&&矩阵快速幂&&哈希
		题目 给定矩阵A, B和模数p,求最小的正整数x满足 A^x = B(mod p). 分析 与整数的离散对数类似,只不过普通乘法换乘了矩阵乘法. 由于矩阵的求逆麻烦,使用 $A^{km-t} = B( ... 
- BZOJ 4128 Matrix BSGS+矩阵求逆
		题意:链接 方法: BSGS+矩阵求逆 解析: 这题就是把Ax=B(mod C)的A和B换成了矩阵. 然而别的地方并没有修改. 所以就涉及到矩阵的逆元这个问题. 矩阵的逆元怎么求呢? 先在原矩阵后接一 ... 
- BZOJ 4128: Matrix
		BZOJ 4128: Matrix 标签(空格分隔): OI BZOJ 大步小步 矩阵 费马小定理 Time Limit: 10 Sec Memory Limit: 128 MB Descriptio ... 
- BZOJ 4128: Matrix (矩阵BSGS)
		类比整数的做法就行了 1A爽哉 #include<bits/stdc++.h> using namespace std; typedef long long LL; const int M ... 
- 【题解】Matrix BZOJ 4128 矩阵求逆 离散对数 大步小步算法
		传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4128 大水题一道 使用大步小步算法,把数字的运算换成矩阵的运算就好了 矩阵求逆?这么基础的线 ... 
- 【BZOJ】4128: Matrix
		题解 学习一下矩阵求逆 就是我们考虑这个矩阵 \(AA^{-1} = I\) 我们相当于让\(A\)乘上一个矩阵,变成\(I\) 我们可以利用初等行变换(只能应用初等行变换,或只应用初等列变换) 分三 ... 
- bzoj 4128 矩阵求逆
		/************************************************************** Problem: 4128 User: idy002 Language: ... 
- BZOJ4128: Matrix(BSGS 矩阵乘法)
		Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 813 Solved: 442[Submit][Status][Discuss] Descriptio ... 
- 【BZOJ4128】Matrix BSGS+hash
		[BZOJ4128]Matrix Description 给定矩阵A,B和模数p,求最小的x满足 A^x = B (mod p) Input 第一行两个整数n和p,表示矩阵的阶和模数,接下来一个n * ... 
随机推荐
- [windows]设置使用空白密码进行远程登录
			前提:系统用户设置了空白密码 方法1步骤: 开始菜单--〉运行--〉输入:gpedit.msc--> 计算机配置--〉Windows设置--〉安全设置--〉本地策略--〉安全选项:帐户:使用空白 ... 
- 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} 解决方法
			Tomcat启动时出现红色警告内容 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'sour ... 
- PHP 常用的无限遍历方法
			一.根据父节点ID循环遍历其下所有子节点 /** * @name 根据id递归某个父类节点下的所有分类节点 * @author tbj * @date 2015-12-19 */ public fun ... 
- selenium的定位
			id定位 find_element_by_id()方法通过id来定位元素 例如: find_element_by_id("kw") find_element_by_id(&quo ... 
- bzoj 2658
			首先考虑容斥 我们计算出所有没有点在其中的矩形,然后用所有矩形减去这些矩形即可 然后考虑如何计算没有点在其中的矩形 采用扫描线的思想,从上向下一行一行扫,假设我们扫到的行编号是$a$,然后考虑如果左右 ... 
- ftp - Internet 文件传输程序 (file transfer program)
			概述 (SYNOPSIS) ftp [-pinegvd ] [host ] pftp [-inegvd ] [host ] 说明 (DESCRIPTION) 用户通过 Ftp 这个程序来使用 Inte ... 
- Robot Framework(十) 执行测试用例——测试执行
			3.2测试执行 本节描述如何执行从解析的测试数据创建的测试套件结构,如何在失败后继续执行测试用例,以及如何正常停止整个测试执行. 3.2.1执行流程 执行套房和测试 设置和拆卸 执行顺序 3.2.2继 ... 
- python之list [ 列表 ]
			1. 列表是什么? list [ ] 逗号隔开 是一个容器 可以存放任意类型 列表 == 书包 书包里可以放水杯.衣服.袜子.钱包 钱包里可以放钱.身份证件,可以包套包 2. 列表能干什么? 存储大量 ... 
- LeetCode 岛屿的最大面积
			给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被水包围着. 找到给定的二维数组中 ... 
- CSS3的背景background
			CSS3中的Background属性 background: background-image || background-position/background-size || background ... 
