【BZOJ4128】Matrix

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有逆

题解:网上看到好多求矩阵的逆的,一定是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的更多相关文章

  1. 【bzoj4128】Matrix 矩阵乘法+Hash+BSGS

    题目描述 给定矩阵A,B和模数p,求最小的x满足 A^x = B (mod p) 输入 第一行两个整数n和p,表示矩阵的阶和模数,接下来一个n * n的矩阵A.接下来一个n * n的矩阵B 输出 输出 ...

  2. 【UVA11019】Matrix Matcher

    Description Given an N × M matrix, your task is to find the number of occurences of an X × Y pattern ...

  3. 【RS】Matrix Factorization Techniques for Recommender Systems - 推荐系统的矩阵分解技术

    [论文标题]Matrix Factorization Techniques for Recommender Systems(2009,Published by the IEEE Computer So ...

  4. 【poj2155】Matrix(二维树状数组区间更新+单点查询)

    Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...

  5. 【BZOJ1125】[POI2008]Poc hash+map+SBT

    [BZOJ1125][POI2008]Poc Description n列火车,每条有l节车厢.每节车厢有一种颜色(用小写字母表示).有m次车厢交换操作.求:对于每列火车,在交换车厢的某个时刻,与其颜 ...

  6. 【BZOJ2081】[Poi2010]Beads hash+调和级数

    [BZOJ2081][Poi2010]Beads Description Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串), ...

  7. 【POJ3243】拓展BSGS(附hash版)

    上一篇博文中说道了baby step giant step的方法(简称BSGS),不过对于XY mod Z = K ,若x和z并不互质,则不能直接套用BSGS的方法了. 为什么?因为这时候不存在逆元了 ...

  8. 【BZOJ 2351】Matrix(Hash)

    题目链接 二维\(Hash\)类似二维前缀和,每一行看成一个\(h\)进制数,每一个以(1,1)为左上角的矩阵看成一个由每一行的\(Hash\)值组成的\(l\)进制数. 然后自己推推柿子就行. #i ...

  9. 【题解】Matrix BZOJ 4128 矩阵求逆 离散对数 大步小步算法

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4128 大水题一道 使用大步小步算法,把数字的运算换成矩阵的运算就好了 矩阵求逆?这么基础的线 ...

随机推荐

  1. python学习的推荐教程

    评注: 还未细看, http://www.crifan.com/files/doc/docbook/python_beginner_tutorial/release/html/python_begin ...

  2. 转:敏捷方式scrum 方案

    http://www.cnblogs.com/taven/archive/2010/10/17/1853386.html 现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... ...

  3. 性能测试篇 :Jmeter监控服务器性能

    转载:http://www.cnblogs.com/chengtch/p/6079262.html jmeter也可以像loadrunner一样监控服务器CPU.内存等性能参数,不过需要安装一些插件 ...

  4. 使用uncompyle2直接反编译python字节码文件pyo/pyc

    update:在Mac OS X版的September 10, 2014版(5.0.9-1)中发现安装目录中的src.zip已更换位置至WingIDE.app/Contents/Resources/b ...

  5. java中数组的复制

    数组复制使我们在编程过程中经常要使用到的,在java中数组复制我们大概能够分为两种,一种是引用复制,还有一种就是深度复制(复制后两个数组互不相干). 以下我们就通过測试的方法来具体看看什么是引用复制和 ...

  6. Unity3D 中脚本执行的先后顺序

    Unity3D本身自带有控制脚本执行先后顺序的方法: Edit ---> Project Settings ---> Script Execution Order  ---> 值越小 ...

  7. 键盘上所有键位的ascii值

    上次用的时候一直找,这次找到了,收藏起来. 0x1 鼠标左键 0x2 鼠标右键 0x3 CANCEL 键 0x4 鼠标中键 0x8 BACKSPACE 键 0x9 TAB 键 0xC CLEAR 键 ...

  8. 关系型数据的分布式处理系统MyCAT(转载)

      ——概述和基本使用教程 日期:2014/12/24 文:阿蜜果 1.   MyCAT概述 1.1 背景 随着传统的数据库技术日趋成熟.计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建 ...

  9. 转 WCF WebService区别

    下面我们来详细讨论一下二者的区别.Web Service和WCF的到底有什么区别. [1]Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架 ...

  10. PHP框架认识初步

    PHP框架比較 CodeIgniter Codeigniter 相当轻量级.下载下来就能用, CI 的最大特点就是可扩展性非常强 你能够通过不改动源代码的方式 优雅的扩展差点儿全部的东西. think ...