【BZOJ4128】Matrix BSGS+hash
【BZOJ4128】Matrix
Description
给定矩阵A,B和模数p,求最小的x满足 A^x = B (mod p)
Input
Output
Sample Input
1 1
1 0
5 3
3 2
Sample Output
HINT
题解:网上看到好多求矩阵的逆的,一定是BSGS的姿势不对吧~
在BSGS时令x=i*m-j,就变成了$A^{i\times m}=BA^{j} (mod\ p)$,然后将矩阵hash一下扔到map里就行啦~
#include <cstdio>
#include <iostream>
#include <cstring>
#include <map>
#include <cmath>
using namespace std;
typedef unsigned long long ull;
int n,m,p;
ull s1[80],s2[80];
map<ull,int> mp;
struct M
{
int v[80][80];
ull hs;
M (){memset(v,0,sizeof(v)),hs=0;}
ull hash()
{
if(hs) return hs;
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) hs+=s1[i-1]*s2[j-1]*v[i][j];
return hs;
}
M operator * (M a) const
{
M b;
int i,j,k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
b.v[i][j]=(b.v[i][j]+v[i][k]*a.v[k][j])%p;
return b;
}
};
M I,A,B,x,y;
int main()
{
scanf("%d%d",&n,&p);
int i,j;
for(s1[0]=s2[0]=1,i=1;i<=n;i++) s1[i]=s1[i-1]*233,s2[i]=s2[i-1]*2333;
for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&A.v[i][j]),I.v[i][j]=(i==j);
for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&B.v[i][j]);
x=y=I,mp[x.hash()]=0;
m=ceil(sqrt((double)p));
for(i=1;i<=m;i++) x=x*A,mp[(B*x).hash()]=i;
for(i=1;i<=m;i++)
{
y=y*x;
if(mp.find(y.hash())!=mp.end())
{
printf("%d",i*m-mp[y.hash()]);
return 0;
}
}
}
【BZOJ4128】Matrix BSGS+hash的更多相关文章
- 【bzoj4128】Matrix 矩阵乘法+Hash+BSGS
题目描述 给定矩阵A,B和模数p,求最小的x满足 A^x = B (mod p) 输入 第一行两个整数n和p,表示矩阵的阶和模数,接下来一个n * n的矩阵A.接下来一个n * n的矩阵B 输出 输出 ...
- 【UVA11019】Matrix Matcher
Description Given an N × M matrix, your task is to find the number of occurences of an X × Y pattern ...
- 【RS】Matrix Factorization Techniques for Recommender Systems - 推荐系统的矩阵分解技术
[论文标题]Matrix Factorization Techniques for Recommender Systems(2009,Published by the IEEE Computer So ...
- 【poj2155】Matrix(二维树状数组区间更新+单点查询)
Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...
- 【BZOJ1125】[POI2008]Poc hash+map+SBT
[BZOJ1125][POI2008]Poc Description n列火车,每条有l节车厢.每节车厢有一种颜色(用小写字母表示).有m次车厢交换操作.求:对于每列火车,在交换车厢的某个时刻,与其颜 ...
- 【BZOJ2081】[Poi2010]Beads hash+调和级数
[BZOJ2081][Poi2010]Beads Description Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串), ...
- 【POJ3243】拓展BSGS(附hash版)
上一篇博文中说道了baby step giant step的方法(简称BSGS),不过对于XY mod Z = K ,若x和z并不互质,则不能直接套用BSGS的方法了. 为什么?因为这时候不存在逆元了 ...
- 【BZOJ 2351】Matrix(Hash)
题目链接 二维\(Hash\)类似二维前缀和,每一行看成一个\(h\)进制数,每一个以(1,1)为左上角的矩阵看成一个由每一行的\(Hash\)值组成的\(l\)进制数. 然后自己推推柿子就行. #i ...
- 【题解】Matrix BZOJ 4128 矩阵求逆 离散对数 大步小步算法
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4128 大水题一道 使用大步小步算法,把数字的运算换成矩阵的运算就好了 矩阵求逆?这么基础的线 ...
随机推荐
- JavaScript入门:006—JS函数的定义
JS函数的声明. 声明函数的格式例如以下: function 函数名(參数列表){ //函数语句: return 返回值; } 来看详细的函数声明.1.普通函数 <script type=&qu ...
- Redis缓存清理
Redis缓存清理 学习了:https://www.cnblogs.com/ZnCl/p/7116870.html 使用 redis-cli.exe登录, 使用flushall 命令: 或者key * ...
- Elasticsearch 基础使用
使用 cURL 执行 REST 命令 可以对 Elasticsearch 发出 cURL 请求,这样很容易从命令行 shell 体验该框架. “Elasticsearch 是无模式的.它可以接受您提供 ...
- 最小化JavaScript代码
1.去除不必要的格式符.空白符.凝视符. 这个操作.事实上能够理解为是一种格式化.尽管它操作的结果事实上是去除掉原始文件的那些格式. 2.模糊(Obfuscation)处理JAVASCRIP脚本源码. ...
- UVA10312- Expression Bracketing(Catalan + 递推)
option=com_onlinejudge&Itemid=8&page=show_problem&problem=1253">题目链接 题意:给出一个序列,长 ...
- apache环境下禁止某文件夹内运行PHP脚本、禁止访问文件或目录执行权限的设置方法
apache环境下禁止某文件夹内运行PHP脚本.禁止访问文件或目录执行权限的设置方法 首先我们来看两段对上传目录设置无权限的列子,配置如下: <Directory "要去掉PHP执 ...
- 用Python实现邮件发送Hive明细数据
代码地址如下:http://www.demodashi.com/demo/12673.html 一.需求描述 客户需要每周周一接收特定的活动数据,生成Excel或是CSV文件,并通过邮件发送给指定接收 ...
- openstack-计算节点安装(Node)
感谢朋友支持本博客,欢迎共同探讨交流.因为能力和时间有限.错误之处在所难免,欢迎指正. 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...
- NoSQL之Redis学习小结
大数据时代要求: 三V:Volume海量.Velocity实时.Variety多样: 三高:高并发.高可扩.高性能 高并发操作不建议使用关联查询,而使用冗余数据,分布式系统支持不了太多的并发. 横向 ...
- <转>Windows平台下Makefile学习笔记(二)
本文转自:http://blog.csdn.net/clever101/article/details/8286066 上次我们学习了怎么用Makefile编译一个控制台工程.这次我们学习一下如何使用 ...