poj 3735 稀疏矩阵矩阵快速幂
设人数为 $n$,构造 $(n + 1) \times (n + 1)$ 的矩阵
得花生:
将改行的最后一列元素 $+ 1$
\begin{gather}
\begin{bmatrix}
1 & 0 & 0 & 1 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\times
\begin{bmatrix}
x \\
y \\
z \\
1 \\
\end{bmatrix}
=
\begin{bmatrix}
x + 1 \\
y \\
z \\
1\\
\end{bmatrix}
\end{gather}
吃花生:
将一行的元素全部清零
\begin{gather}
\begin{bmatrix}
1 & 0 & 0 & 0\\
0 & 0 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\times
\begin{bmatrix}
x \\
y \\
z \\
1 \\
\end{bmatrix}
=
\begin{bmatrix}
x \\
0 \\
z \\
1\\
\end{bmatrix}
\end{gather}
交换两行
\begin{gather}
\begin{bmatrix}
0 & 1 & 0 & 0 \\
1 & 0 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\times
\begin{bmatrix}
x \\
y \\
z \\
1 \\
\end{bmatrix}
=
\begin{bmatrix}
y \\
x \\
z \\
1\\
\end{bmatrix}
\end{gather}
普通矩阵快速幂
TLE
稀疏矩阵矩阵快速幂
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std;
const int N = ; #define LL long long LL n, m, k;
struct Matrix {LL M[N][N];} A; Matrix operator * (Matrix &a, Matrix &b) {
Matrix ret;
memset(ret.M, , sizeof ret.M);
for(int i = ; i <= n; i ++)
for(int j = ; j <= n; j ++)
if(a.M[i][j])
for(int K = ; K <= n; K ++)
ret.M[i][K] = (ret.M[i][K] + a.M[i][j] * b.M[j][K]);
return ret;
} Matrix Ksm(int p) {
Matrix Ans;
memset(Ans.M, , sizeof Ans.M);
for(int i = ; i <= n; i ++) Ans.M[i][i] = ;
while(p) {
if(p & ) Ans = Ans * A;
A = A * A;
p >>= ;
}
return Ans;
} int main() {
while() {
cin >> n >> k >> m;
if(n == && m == && k == ) return ;
n ++;
char s[];
memset(A.M, , sizeof A.M);
for(int i = ; i <= n; i ++) A.M[i][i] = ;
for(int i = ; i <= m; i ++) {
scanf("%s", s);
if(s[] == 'g') {
int x; std:: cin >> x;
A.M[x][n] ++;
} else if(s[] == 'e') {
int x; std:: cin >> x;
for(int j = ; j <= n; j ++) A.M[x][j] = ;
} else {
int x, y; std:: cin >> x >> y;
swap(A.M[x], A.M[y]);
}
}
Matrix Answer = Ksm(k);
for(int i = ; i < n; i ++) cout << Answer.M[i][n] << " ";
printf("\n");
}
return ;
}
poj 3735 稀疏矩阵矩阵快速幂的更多相关文章
- POJ 3744 【矩阵快速幂优化 概率DP】
搞懂了什么是矩阵快速幂优化.... 这道题的重点不是DP. /* 题意: 小明要走某条路,按照个人兴致,向前走一步的概率是p,向前跳两步的概率是1-p,但是地上有地雷,给了地雷的x坐标,(一维),求小 ...
- poj 3070 Fibonacci (矩阵快速幂乘/模板)
题意:给你一个n,输出Fibonacci (n)%10000的结果 思路:裸矩阵快速幂乘,直接套模板 代码: #include <cstdio> #include <cstring& ...
- poj 3070 Fibonacci 矩阵快速幂
Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. F ...
- POJ——3070Fibonacci(矩阵快速幂)
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12329 Accepted: 8748 Descri ...
- POJ 3070 Fibonacci 矩阵快速幂模板
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18607 Accepted: 12920 Descr ...
- POJ 3070 Fibonacci矩阵快速幂 --斐波那契
题意: 求出斐波那契数列的第n项的后四位数字 思路:f[n]=f[n-1]+f[n-2]递推可得二阶行列式,求第n项则是这个矩阵的n次幂,所以有矩阵快速幂模板,二阶行列式相乘, sum[ i ] [ ...
- POJ 3613 floyd+矩阵快速幂
题意: 求s到e恰好经过n边的最短路 思路: 这题已经被我放了好长时间了. 原来是不会矩阵乘法,快速幂什么的也一知半解 现在终于稍微明白了点了 其实就是把矩阵乘法稍微改改 改成能够满足结合律的矩阵&q ...
- poj 3735 Training little cats 矩阵快速幂+稀疏矩阵乘法优化
题目链接 题意:有n个猫,开始的时候每个猫都没有坚果,进行k次操作,g x表示给第x个猫一个坚果,e x表示第x个猫吃掉所有坚果,s x y表示第x个猫和第y个猫交换所有坚果,将k次操作重复进行m轮, ...
- 矩阵快速幂 POJ 3735 Training little cats
题目传送门 /* 题意:k次操作,g:i猫+1, e:i猫eat,s:swap 矩阵快速幂:写个转置矩阵,将k次操作写在第0行,定义A = {1,0, 0, 0...}除了第一个外其他是猫的初始值 自 ...
随机推荐
- [CF436D]Pudding Monsters
题目大意:有一个长度为$2\times 10^5$的板,有$n(n\leqslant 10^5)$个格子$a_1,\dots,a_n$有布丁怪兽,一开始连续的怪兽算一个怪兽,有$m(m\leqslan ...
- Matlab单例模式
classdef SingletonClass < handle methods(Access = private) function obj = SingletonClass() disp(' ...
- DQL 查询表中的数据
DQL 查询表中的数据:查询语句(最复杂的语句)不会对数据库中的数据进行修改,只是一种显示数据的方式 语法格式: select 字段列表 from 表名列表 where 条件列表 group by 分 ...
- 安装node.js->npm->vue
我们研究vue时,首先操作的就是vue的引用,大部分人为了方便直接在页面上引用vue.js,但是一些大型网站还是比较喜欢用vue的npm命令来安装vue并使用,之前研究vue时,研究过使用npm安装的 ...
- SpringBoot 中的使用事务
转自:https://blog.csdn.net/linzhiqiang0316/article/details/52638039 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数 ...
- Linux命令——rsync
参考:Rsync (Remote Sync): 10 Practical Examples of Rsync Command in Linux How to Sync Files/Directorie ...
- C++(三十九) — 主函数中增加调试信息
程序调试技术: (1)阅读程序,静态代码复查: (2)“cout大法” (3)使用开发工具,断点 int main() { TShape s(lu, lu); cout << __ ...
- MySQL JOIN原理(转)
先看一下实验的两张表: 表comments,总行数28856 表comments_for,总行数57,comments_id是有索引的,ID列为主键. 以上两张表是我们测试的基础,然后看一下索引,co ...
- 思考---(科研99% )VS (产品75%)
转目前人脸识别技术的挑战是什么? - 知乎 标签: | 发表时间:-- : | 作者: 出处:https://www.zhihu.com 也是放假太闲,上知乎来锻炼一下手指. 在回答题主的问题的时候, ...
- 利用Python openpyxl操作Excel
from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = ...