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 输出 输出 ...
随机推荐
- JAVA高并发秒杀API项目的学习笔记
一步一步的搭建JAVA WEB项目,采用Maven构建,基于MYBatis+Spring+Spring MVC+Bootstrap技术的秒杀项目学习的视频:http://www.imooc.com/l ...
- Kudu版本升级(官网推荐的步骤)(Upgrade from a Previous Version of Kudu)
不多说,直接上干货! http://kudu.apache.org/docs/installation.html#sles_from_source
- POJ 3522 ——Slim Span——————【最小生成树、最大边与最小边最小】
Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7102 Accepted: 3761 Descrip ...
- cookie乱码处理 示例
package com.log; import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; ...
- 电路中GND和GROUND、VCC,VDD,VEE,VSS
电路解析:GND和GROUND.VCC,VDD,VEE,VSS 参考: http://www.elecfans.com/dianzichangshi/20160822432514.html 一.解释版 ...
- C++ VS编译问题--LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
用VS编译时,当出现错误LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏: 这个问题的解决方案为: 1. 找到项目\xx属性\配置属性\清单工具\输 ...
- appium(四)交互分析
转自:http://blog.csdn.net/Yejianyun1/article/details/56017360 一.简介 英文官网:appium官网 Appium跨平台.开源的自动化测试工具, ...
- 分布式系统ID生成方案汇总
在分布式系统中,需要对大量的数据.消息.请求等进行唯一的标识,例如分布式数据库的ID需要满足唯一且多数据库同步,在单一系统中,使用数据库自增主键可以满足需求,但是在分布式系统中就需要一个能够生成全局唯 ...
- Extjs4如何构造store基类
目标:重写一个BaseStore的基类,它继承自Ext.data.Store基类. autoLoad:true/false 是否自动加载,true时创建store即自动加载,一般适合get方式:fal ...
- Ajax使用 初始化数据 + mvc
2017-3-16 mvc+jquery+easyUI做项目 <input type="text" id="txtSTQty" name="tx ...