设人数为 $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 ;
}

最新文章

  1. BZOJ 4552: [Tjoi2016&amp;Heoi2016]排序
  2. Java Web技术之JSP与EL表达式
  3. 《zw版&#183;Halcon入门教程与内置demo》
  4. jQuery简单实现iframe的高度根据页面内容自适应的方法
  5. 冒泡排序和快速排序的java实现
  6. eclipse alt + &#39;/&#39; not working.
  7. Java学习日记-2 零零碎碎
  8. java mysql连接时出现的问题
  9. 关于Jedis是否线程安全的测试
  10. 想做web开发 就学JavaScript
  11. java的类继承(与c++对比)
  12. 让AutoMapper在你的项目里飞一会儿
  13. yii2 数据库操作详解(转载)
  14. 矩阵的特征值和特征向量的雅克比算法C/C++实现
  15. Lamda所有的Capture均是引用
  16. Yii 使用Widge面面观
  17. Selenium+Chrome或Firefox的动态爬虫程序
  18. OpenStack入门篇(七)之认证服务Keystone
  19. selenium grid应用1-多浏览器执行用例
  20. Solr 搜索功能使用

热门文章

  1. java之hibernate之基于主键的双向一对一关联映射
  2. pythdon day13:网络编程socket
  3. vue初级使用
  4. HTML Marquee跑马灯
  5. php ajax生成excel并下载
  6. RedisCluster的rename机制失败报错,解决又是数据倾斜问题
  7. php 执行大量sql语句 MySQL server has gone away
  8. SpringCloud_Eureka与Zookeeper对比
  9. Spring Boot 配置文件中的花样
  10. No.1.测试Synchronized加锁String字符串后的多线程同步状况