C++-POJ3735-Training little cats[矩阵乘法][快速幂]
矩阵快速幂,主要是考构造。另外,swap总是写龊?
为什么?干脆放弃了。唉,我太难了。
思路:操作e和s都很好想,主要是g操作
我们可以额外空出一位,记为1,每次要加1,就对这个额外的1进行计算即可
不妨定义A=[1 0 0 ... 0],此时只要构造一组操作的等效矩阵T就好了
就是添一位使初始矩阵A变为一个n+1元组,编号为0到n。以三只猫为例[1 0 0 0]
#include <cstdio>
typedef long long ll;
const int N=;
int n,m,k;ll t;
struct Matrix{ll a[N][N];}O,I;
void OI(){
for(int i=;i<N;i++)
for(int j=;j<N;j++)
O.a[i][j]=,I.a[i][j]=(i==j);
}
Matrix Mul(Matrix A,Matrix B) {
Matrix C=O;
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
if(A.a[i][k])//注意这个优化
for(int j=;j<=n;j++)
C.a[i][j]+=A.a[i][k]*B.a[k][j];
return C;
}
Matrix Pow(Matrix A,int n){
Matrix B=I;
for(;n;A=Mul(A,A),n>>=)if(n&)B=Mul(B,A);
return B;
}
Matrix makeA(){Matrix A=O;A.a[][]=;return A;}
Matrix makeT(){
Matrix T=I;char s[];int a,b,i;
while(k--){
scanf("%s%d",s,&a);
if(s[]=='g')T.a[][a]++;
else if(s[]=='e')for(i=;i<=n;i++)T.a[i][a]=;
else for(scanf("%d",&b),i=;i<=n;i++)t=T.a[i][a],T.a[i][a]=T.a[i][b],T.a[i][b]=t;
}
return T;
}
int main(){
OI();
while(scanf("%d%d%d",&n,&m,&k)!=EOF){
if(n==&&m==&&k==)break;
Matrix A=makeA(),T=makeT();A=Mul(A,Pow(T,m));
for(int i=;i<=n;i++)printf("%lld ",A.a[][i]);
puts("");
}
return ;
}
C++-POJ3735-Training little cats[矩阵乘法][快速幂]的更多相关文章
- Qbxt 模拟赛 Day4 T2 gcd(矩阵乘法快速幂)
/* 矩阵乘法+快速幂. 一开始迷之题意.. 这个gcd有个规律. a b b c=a*x+b(x为常数). 然后要使b+c最小的话. 那x就等于1咯. 那么问题转化为求 a b b a+b 就是斐波 ...
- 洛谷 P4910 帕秋莉的手环 矩阵乘法+快速幂详解
矩阵快速幂解法: 这是一个类似斐波那契数列的矩乘快速幂,所以推荐大家先做一下下列题目:(会了,差不多就是多倍经验题了) 注:如果你不会矩阵乘法,可以了解一下P3390的题解 P1939 [模板]矩阵加 ...
- [poj3735] Training little cats_矩乘快速幂
Training little cats poj-3735 题目大意:给你n个数,k个操作,将所有操作重复m次. 注释:三种操作,将第i个盒子+1,交换两个盒子中的个数,将一个盒子清空.$1\le m ...
- 矩阵乘法快速幂 codevs 1732 Fibonacci数列 2
1732 Fibonacci数列 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 在“ ...
- ACM学习历程—HDU5667 Sequence(数论 && 矩阵乘法 && 快速幂)
http://acm.hdu.edu.cn/showproblem.php?pid=5667 这题的关键是处理指数,因为最后结果是a^t这种的,主要是如何计算t. 发现t是一个递推式,t(n) = c ...
- codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数
对于这道题目以及我的快速幂以及我的一节半晚自习我表示无力吐槽,, 首先矩阵乘法和快速幂没必要太多说吧,,嗯没必要,,我相信没必要,,实在做不出来写两个矩阵手推一下也就能理解矩阵的顺序了,要格外注意一些 ...
- [vijos1725&bzoj2875]随机数生成器<矩阵乘法&快速幂&快速乘>
题目链接:https://vijos.org/p/1725 http://www.lydsy.com/JudgeOnline/problem.php?id=2875 这题是前几年的noi的题,时间比较 ...
- [codevs]1250斐波那契数列<矩阵乘法&快速幂>
题目描述 Description 定义:f0=f1=1, fn=fn-1+fn-2(n>=2).{fi}称为Fibonacci数列. 输入n,求fn mod q.其中1<=q<=30 ...
- 【BZOJ-1009】GT考试 KMP+DP+矩阵乘法+快速幂
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2745 Solved: 1694[Submit][Statu ...
随机推荐
- APP图标在线生成
在线生成安卓APP图标生成 图标在线 在线图标 安卓图标 生成图标 https://icon.wuruihong.com/ 在线png图片压缩 png压缩 https://compresspng.c ...
- SSM项目下Druid连接池的配置及数据源监控的使用
一,连接池的配置 在pom.xml中添加,druid的maven信息 <dependency> <groupId>com.alibaba</groupId> < ...
- DK1.5-JDK11各个新特性
摘要: 参考文献: https://blog.csdn.net/lsxf_xin/article/details/79712537 JDK各个版本的新特性 要了解一门语言,最好的方式就是要能从基础的版 ...
- powersploit的两个信息收集的脚本
0x00 简介 powersploit是基于powershell的渗透工具包,里面都是powershell的脚本工具文件.工具包地址:https://github.com/PowerShellMafi ...
- 贪心训练均分纸牌Noip2002
题目链接:https://www.luogu.com.cn/problem/P1031 题目描述 有N堆纸牌,编号分别为 1,2,…,N.每堆上有若干张,但纸牌总数必为N的倍数.可以在任一堆上取若干张 ...
- cf912D
题意简述:往n*m的网格中放k条鱼,一个网格最多放一条鱼,然后用一个r*r的网随机去捞鱼,问怎么怎么放鱼能使得捞鱼的期望最大,输出这个期望 题解:肯定优先往中间放,这里k不大,因此有别的简单方法,否则 ...
- 如何利用 WPS Office 进行 IIS Log 分析
找到 IIS Log 打开 Internet Information Service (IIS) Manager 点击左侧 Connections > Sites,在右侧 Sites 列表中定位 ...
- visual studio2010编译过程中出现COFF文件损坏的原因和方法总结
一.现象描述 笔者在用visual studio2010进行控制台程序进行程序编译时候,经常会遇到代码代码没有语法错误,但是编译不通过的现象.系统报错为 LINK : fatal error LNK1 ...
- CF 150E Freezing with Style [长链剖分,线段树]
\(sol:\) 给一种大常数 \(n \log^2 n\) 的做法 考虑二分,由于是中位数,我们就二分这个中位数,\(x>=mid\)则设为 \(1\),否则为 \(-1\) 所以我们只需要找 ...
- 【45】谷歌 Inception 网络简介Inception(1)
谷歌 Inception 网络简介(Inception network motivation) 构建卷积层时,你要决定过滤器的大小究竟是1×1,3×3还是5×5,或者要不要添加池化层.而Incepti ...