矩阵快速幂/快速乘
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
Recursive sequence HDU --- 5950 【公式矩阵快速幂】
传送门思路:因为直接给了公式, 所以可以直接推的我们所需要的目标矩阵, 如果没有什么思路的话看看另外一篇原理介绍, 里面有一遍博客讲的炒鸡好!(怎么推要求那个矩阵的几次方,就是用等比数列,an = a(n-1) * q ,然后看题目给的那一项从而推出是q的几次方.)AC代码:#include<cstdio>#include<cmath>#include<cstring>#include<alg原创 2017-06-21 13:53:37 · 391 阅读 · 0 评论 -
HDU --- 4686 【矩阵快速幂+求和】
传送门思路: 这道题也是给了公式, 然后跟着公式推导, 也很容易的知道矩阵的构造, 注意的是在矩阵中把Sn加上, 这样就可以直接算出答案了.AC Code#include<cstdio>#include<cmath>#include<algorithm>#include<iostream>#include<cstring>#include<set>#include<queue>#inc原创 2017-06-21 13:59:44 · 499 阅读 · 0 评论 -
ZOJ --- 2974 倒水 【思维 + 矩阵快速幂】
传送门题意 : 就是给你N个瓶子, 每一分钟依次对每一个瓶子进行操作, 分别是将该个瓶子里的水, 倒入所给的瓶子里去, 一共持续m分钟, 最后输出每一个瓶子里的水. 思路 : 不好一眼看出来是矩阵的思想, 这是就需要把样例进行推导, 的然后就可以写出来两个矩阵相乘, 最后得到的就是一个其他矩阵, 所以这道题就是矩阵快速幂. 特别注意下当k等于0时对瓶子的操作. AC 代码:#include<b原创 2017-06-22 14:13:31 · 527 阅读 · 0 评论 -
HDU --- 5015 233 Matrix 【思维 + 矩阵快速幂】
传送门思路 : 第一列元素为: 0 a1 a2 a3 a4转化为: 23 a1 a2 a3 a4 3 则第二列为: 23*10+3 23*10+3+a1 23*10+3+a1+a2 23*10+3+a1+a2+a3 2*10+3+a1+a2+a3+a4 3 所以就可以建立矩阵, 然后求相应的列数就可以啦!AC Code#include<bits/stdc++.原创 2017-06-22 14:27:33 · 388 阅读 · 0 评论 -
快速乘的原理及其代码
基本原理 : 代码实现: (logn)inline ll mult_mod(ll a, ll b, ll m){ ll res = 0; while(b){ if(b&1) res = (res+a)%m; a = (a+a)%m; b >>= 1; } return res;}快速乘其实就是来防止有两个较大的数原创 2017-08-07 23:53:27 · 5238 阅读 · 1 评论 -
HDU --- 4549 M斐波那契数列 【费马小定理+矩阵快速幂】
传送门 思路: 通过把前面几项手推出来可以发现, 其次方项符合斐波那契数列, 又因为数据非常大, 所以就可以想到用矩阵快速幂去求得次方项, 需要注意的就是我们求的是次方, 而答案是取的某个数的该次方, 而a^(p-1) % p != a^((p-1)%p, 所以就需要加费马小定理去 %AC Code#include<bits/stdc++.h>#define CLR(x) memset(x,0原创 2017-06-22 14:34:28 · 559 阅读 · 0 评论 -
HDU 2807 The Shortest Path 【最短路 + 快速判断矩阵是否相等】
传送门 // 题意: 给定n个m*m的矩阵, 如果A*B == C矩阵, 那么A -> C 有一条长度为1 的边. 最后给出q次询问, 每次询问两个矩阵的最短距离.// 思路: 很明显我们首先需要先把矩阵先存下来, 然后n^3方建图, 然后我们知道矩阵相乘是n^3的,然后判断两个矩阵是否相等是n^2的, 一共就是n^5的,完全会爆炸. 所以这样肯定不行. 所以我们首先要对矩阵进行hash降维判断.原创 2018-01-29 17:15:43 · 329 阅读 · 0 评论 -
快速幂,矩阵快速幂原理介绍
快速幂:复杂度为logn,比普通的n快了很多了.原理 :以求a的b次方来介绍:首先把b转换成二进制数该二进制数第i位的权为 2^i - 1 .比如 : 11的二进制是101111 = 2³×1 + 2²×0 + 2¹×1 + 2º×1所以假设我们要求a^b,那么其实b是可以拆成二进制的,该二进制数第i位的权为2^(i-1),例如当b==11时 a...原创 2017-06-21 13:49:16 · 2399 阅读 · 0 评论