BZOJ4128: Matrix(BSGS 矩阵乘法)
Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 813  Solved: 442
[Submit][Status][Discuss]
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
Source
裸的BSGS,把$x$分解为$im - j$
原式化为$a^{im} \equiv ba^j \pmod p$
其中$m = \ceil{sqrt(p)}$
然后枚举一个$j$,存到map里
再枚举一个$i$判断即可
一开始map写成bool类型了调了半个小时
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<map>
//#define LL long long
using namespace std;
const int MAXN = * 1e5 + ;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int N, mod, M;
struct Matrix {
int m[][];
Matrix operator * (const Matrix &rhs) const {
Matrix ans = {};
for(int i = ; i <= N; i++)
for(int j = ; j <= N; j++)
for(int k = ; k <= N; k++)
(ans.m[i][j] += m[i][k] * rhs.m[k][j]) %= mod;
return ans;
}
void init() {
for(int i = ; i <= N; i++)
for(int j = ; j <= N; j++)
m[i][j] = read();
}
void print() {
for(int i = ; i <= N; i++, puts(""))
for(int j = ; j <= N; j++)
printf("%d ", m[i][j]);
}
bool operator < (const Matrix &rhs) const {
for(int i = ; i <= ; i++)
for(int j = ; j <= ; j++) {
if(m[i][j] < rhs.m[i][j]) return ;
if(m[i][j] > rhs.m[i][j]) return ;
}
return ;
}
}A, B;
map<Matrix, int> mp;
void MakeMap() {
Matrix a = B;
mp[a] = ;
for(int i = ; i <= M; i++) a = a * A, mp[a] = i;
}
void FindAns() {
Matrix a, am = A;
for(int i = ; i <= M - ; i++) am = am * A;
a = am;
for(int i = ; i <= M; i++) {
if(mp[a]) printf("%d", i * M - mp[a]), exit();
a = a * am;
}
}
main() {
N = read(); mod = read();
A.init(); B.init();
M = (double)ceil(sqrt(mod));
MakeMap();
FindAns();
}
BZOJ4128: Matrix(BSGS 矩阵乘法)的更多相关文章
- bzoj 4128: Matrix ——BSGS&&矩阵快速幂&&哈希
		
题目 给定矩阵A, B和模数p,求最小的正整数x满足 A^x = B(mod p). 分析 与整数的离散对数类似,只不过普通乘法换乘了矩阵乘法. 由于矩阵的求逆麻烦,使用 $A^{km-t} = B( ...
 - HDU4965 Fast Matrix Calculation —— 矩阵乘法、快速幂
		
题目链接:https://vjudge.net/problem/HDU-4965 Fast Matrix Calculation Time Limit: 2000/1000 MS (Java/Othe ...
 - POJ 3318 Matrix Multiplication(矩阵乘法)
		
题目链接 题意 : 给你三个n维矩阵,让你判断A*B是否等于C. 思路 :优化将二维转化成一维的.随机生成一个一维向量d,使得A*(B*d)=C*d,多次生成多次测试即可使错误概率大大减小. #inc ...
 - HDU 4965 Fast Matrix Calculation 矩阵乘法 乘法结合律
		
一种奇葩的写法,纪念一下当时的RE. #include <iostream> #include <cstdio> #include <cstring> #inclu ...
 - C++ 矩阵乘法
		
//构造矩阵类,重载乘法操作符 //作者:nuaazdh //时间:2011年12月1日 #include <iostream> using namespace std; //Matrix ...
 - BZOJ_1712_[Usaco2007 China]Summing Sums 加密_矩阵乘法
		
BZOJ_1712_[Usaco2007 China]Summing Sums 加密_矩阵乘法 Description 那N只可爱的奶牛刚刚学习了有关密码的许多算法,终于,她们创造出了属于奶牛 ...
 - P1962 斐波那契数列-题解(矩阵乘法扩展)
		
https://www.luogu.org/problemnew/show/P1962(题目传送) n的范围很大,显然用普通O(N)的递推求F(n)铁定超时了.这里介绍一种用矩阵快速幂实现的解法: 首 ...
 - 蓝桥杯 算法训练 ALGO-60 矩阵乘法
		
算法训练 矩阵乘方 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个矩阵A,一个非负整数b和一个正整数m,求A的b次方除m的余数. 其中一个nxn的矩阵除m的余数得到的仍是一个 ...
 - 【bzoj4128】Matrix  矩阵乘法+Hash+BSGS
		
题目描述 给定矩阵A,B和模数p,求最小的x满足 A^x = B (mod p) 输入 第一行两个整数n和p,表示矩阵的阶和模数,接下来一个n * n的矩阵A.接下来一个n * n的矩阵B 输出 输出 ...
 
随机推荐
- android 中百度地图 关于地图缩放所调用的事件
			
在做百度地图的时候 javascript 有个地图缩放的事件 但是在android 的API里面却没有,但是还好 官方给了一个MapStatusChangeListener,是这样介绍的 百度地图S ...
 - 几个单元素Loading动画解构
			
这个账号建了也有1个多月,拖延症患者终于下定决心开始写博.做前端从前至后差不多1年时间,如果文中有什么纰漏欢迎指出,未来的路还很长~ 第一篇文章用来解构几个挺不错的单元素Loading动画.效果图如下 ...
 - GCC操作
			
GCC编译器常用选项 生成动态链接库: gcc file.c -fPIC -o file.so, PIC表示Position-Independent Code: 独立地址代码 编译: gcc -c f ...
 - [转]ASP.NET Core集成微信登录
			
本文转自:http://www.cnblogs.com/early-moon/p/5819760.html 工具: Visual Studio 2015 update 3 Asp.Net Core 1 ...
 - MongoDB 搭建Node.js开发环境
			
理解Mongoose Elegant MongoDB object modeling for Node.js 安装Mongoose $ cnpm install --save mongoose ...
 - dotnetcharting 的简单使用
			
dotnetcharting 是一个很好用的图表控件,能画出很漂亮的报表,一般常用到的主要有柱状图.饼图.折线图三种. dotnetcharting 有web版.winform版多个版本可供使用,官方 ...
 - IDEA插件JRebel安装配置与破解激活详细教程(转)
			
JRebel 介绍 IDEA上原生是不支持热部署的,一般更新了 Java 文件后要手动重启 Tomcat 服务器,才能生效,浪费不少生命啊.目前对于idea热部署最好的解决方案就是安装JRebel插件 ...
 - #include stdio.h(7)
			
#include <stdio.h> int main() { //***********一.循环语句*************** //什么叫做循环: //重复的做某件事情,重复的执行一 ...
 - css float布局--右侧上部固定下部自适应大小
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - 【起航计划 005】2015 起航计划 Android APIDemo的魔鬼步伐 04 App->Activity->Custom Dialog Dialog形式的Activity,Theme的使用,Shape的使用
			
App->Activity->Custom Dialog 例子使用Activity 来实现自定义对话框 类CustomDialogActivity本身无任何特别之处.关键的一点是其在And ...