POJ3233Matrix Power Series(矩阵快速幂)
题意
给出$n \times n$的矩阵$A$,求$\sum_{i = 1}^k A^i $,每个元素对$m$取模
Sol
考虑直接分治
当$k$为奇数时
$\sum_{i = 1}^k A^i = \sum_{i = 1}^{k / 2 + 1} A^i + A^{k / 2 + 1}(\sum_{i = 1}^{k / 2} A^i)$
当$k$为偶数时
$sum_{i = 1}^k = \sum_{i = 1}^{k / 2} A^i + A^{k / 2}(\sum_{i = 1}^{k / 2}A^i)$
当然还可以按套路对前缀和构造矩阵也是可以做的。
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<map>
- #define LL long long
- using namespace std;
- int N, K, mod;
- int mul(int x, int y) {
- if(1ll * x * y > mod) return 1ll * x * y % mod;
- else return 1ll * x * y;
- }
- int add(int x, int y) {
- if(x + y > mod) return x + y - mod;
- else return x + y;
- }
- struct Matrix {
- int m[][];
- Matrix() {
- memset(m, , sizeof(m));
- }
- bool operator < (const Matrix &rhs) const {
- for(int i = ; i <= N; i++)
- for(int j = ; j <= N; j++)
- if(m[i][j] != rhs.m[i][j])
- return m[i][j] < rhs.m[i][j];
- return ;
- }
- Matrix operator * (const Matrix &rhs) const {
- Matrix ans;
- for(int k = ; k <= N; k++)
- for(int i = ; i <= N; i++)
- for(int j = ; j <= N; j++)
- ans.m[i][j] = add(ans.m[i][j], mul(m[i][k], rhs.m[k][j]));
- return ans;
- }
- Matrix operator + (const Matrix &rhs) const {
- Matrix ans;
- for(int i = ; i <= N; i++)
- for(int j = ; j <= N; j++)
- ans.m[i][j] = add(m[i][j], rhs.m[i][j]);
- return ans;
- }
- }a;
- Matrix getbase() {
- Matrix base;
- for(int i = ; i <= N; i++) base.m[i][i] = ;
- return base;
- }
- Matrix fp(Matrix a, int p) {
- Matrix base = getbase();
- while(p) {
- if(p & ) base = base * a;
- a = a * a; p >>= ;
- }
- return base;
- }
- Matrix solve(int k) {
- if(k == ) return a;
- Matrix res = solve(k / );
- if(k & ) {
- Matrix po = fp(a, k / + );
- return res + po + po * res;
- }
- else return res + fp(a, k / ) * res;
- }
- main() {
- // freopen("a.in", "r", stdin);
- cin >> N >> K >> mod;
- for(int i = ; i <= N; i++)
- for(int j = ; j <= N; j++)
- cin >> a.m[i][j];
- Matrix ans = solve(K);
- for(int i = ; i <= N; i++, puts(""))
- for(int j = ; j <= N; j++)
- printf("%d ", ans.m[i][j] % mod);
- }
POJ3233Matrix Power Series(矩阵快速幂)的更多相关文章
- POJ 3233 Matrix Power Series 矩阵快速幂+二分求和
矩阵快速幂,请参照模板 http://www.cnblogs.com/pach/p/5978475.html 直接sum=A+A2+A3...+Ak这样累加肯定会超时,但是 sum=A+A2+...+ ...
- POJ 3233 Matrix Power Series 矩阵快速幂
设S[k] = A + A^2 +````+A^k. 设矩阵T = A[1] 0 E E 这里的E为n*n单位方阵,0为n*n方阵 令A[k] = A ^ k 矩阵B[k] = A[k+1] S[k] ...
- POJ3233:Matrix Power Series(矩阵快速幂+二分)
http://poj.org/problem?id=3233 题目大意:给定矩阵A,求A + A^2 + A^3 + … + A^k的结果(两个矩阵相加就是对应位置分别相加).输出的数据mod m.k ...
- POJ 3233:Matrix Power Series 矩阵快速幂 乘积
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 18450 Accepted: ...
- POJ3233 Matrix Power Series 矩阵快速幂 矩阵中的矩阵
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 27277 Accepted: ...
- POJ3233:Matrix Power Series(矩阵快速幂+递推式)
传送门 题意 给出n,m,k,求 \[\sum_{i=1}^kA^i\] A是矩阵 分析 我们首先会想到等比公式,然后得到这样一个式子: \[\frac{A^{k+1}-E}{A-E}\] 发现要用矩 ...
- POJ3233 Matrix Power Series(矩阵快速幂+分治)
Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak. ...
- poj3233Matrix Power Series(矩阵乘法)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 23187 Accepted: ...
- POJ3233 Matrix Power Series(快速幂求等比矩阵和)
题面 \(solution:\) 首先,如果题目只要我们求\(A^K\) 那这一题我们可以直接模版矩乘快速幂来做,但是它现在让我们求$\sum_{i=1}^{k}{(A^i)} $ 所以我们思考一下这 ...
随机推荐
- JConsole远程监控配置
首先,看本机(Windows)安装了JRE没 Win > CMD 打开命令窗口 如有安装,则会显示以下版本信息:若没有显示,就安装吧 C:\Users\Administrator>java ...
- [Manacher+bit]Palindrome
https://nanti.jisuanke.com/t/15428 题目大意:离散表示的字符串,求其最长回文串长度. 解题关键:若只用Manacher算法,在统计sum时会超时,所以加一个树状数组来 ...
- Linux服务器监控工具--Nmon介绍
一.Nmon介绍(详细请参考百度百科) 是一款分析 AIX 和 Linux 性能的免费工具,这个高效的工具可以工作于任何哑屏幕.telnet 会话.甚至拨号线路.另外,它并不会消耗大量的 CPU 周期 ...
- sklearn解决过拟合的例子
Learning curve 检视过拟合 sklearn.learning_curve 中的 learning curve 可以很直观的看出我们的 model 学习的进度, 对比发现有没有 overf ...
- 20169219《linux内核原理与分析》第六周作业
网易云课堂学习 1.intel x86 CPU有四种不同的执行级别0-3,linux只使用了其中的0级和3级分贝来表示内核态和用户态. 2.一般来说在linux中,地址空间是一个显著的标志:0xc00 ...
- pure css简单组件,借鉴bootstrap
<!doctype html> <html> <head> <meta http-equiv="Content-type" content ...
- CentOS6.5添加rbd模块
[root@ceph-monitor opt]# modprobe rbd FATAL: Module rbd not found. Once you have deployed the almi ...
- 对各种lca算法的理解
1.RMQ+ST 首先注意这个算法的要素:结点编号,dfs序,结点深度. 首先dfs,求出dfs序,同时求出每个结点的深度.然后st算法,维护深度最小的结点编号(dfs序也可以,因为他们俩可以互相转换 ...
- 让你的Kivy支持中文字符
前言 默认Kivy字体不支持中文,本文简单描述如何让你的应用支持中文字符 代码 from kivy.app import App from kivy.core.text import LabelBas ...
- SaltStack自动化安装配置haproxy
准备环境node1:192.168.217.149 (saltstack master)node2:192.168.217.150(saltstack minion)下载haproxy1.6.2.ta ...