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 ...
随机推荐
- Caliburn.Micro框架之Action Convertions
首先新建一个项目,名称叫Caliburn.Micro.ActionConvertions 然后删掉MainWindow.xaml 然后去app.xaml删掉StartupUri这行代码 其次,安装Ca ...
- url相对路径变成绝对路径
var eleLink = document.createElement('a'); eleLink.href = "/wordpress/?p=9227"; console.lo ...
- Spark基础和RDD
spark 1. Spark的四大特性 速度快 spark比mapreduce快的两个原因 基于内存 1. mapreduce任务后期在计算的是时候,每一个job的输出结果都会落地到磁盘,后续有其他的 ...
- asp.net abp模块化开发之通用树2:设计思路及源码解析
一.前言 上一篇大概说了下abp通用树形模块如何使用,本篇主要分析下设计思路. 日常开发中会用到很多树状结构的数据,比如:产品的多级分类.省市区县,大多数系统也会用到类似“通用字典/数据字典”的功能, ...
- 刷题84. Largest Rectangle in Histogram
一.题目说明 题目84. Largest Rectangle in Histogram,给定n个非负整数(每个柱子宽度为1)形成柱状图,求该图的最大面积.题目难度是Hard! 二.我的解答 这是一个 ...
- 从零开始一个个人博客 by asp.net core and angular(一)
这是一个个人叙述自己建设博客的帖子,既然是第一篇那肯定是不牵扯代码了,主要讲一下大体的东西,微软最新的web框架应该就数asp.net core 3.1了这是一个长期支持版,而且是跨平台又开源版本,所 ...
- java开发病房管理系统
开发环境: Windows操作系统开发工具: Myeclipse+Jdk+Tomcat+MySQL数据库 运行效果图 源码及原文链接:https://javadao.xyz/forum.php?mod ...
- 整理了Linux常用命令变量
查看信息命令 ls 查看当前目录下面的所有文件 -a 显示所有文件(包括隐藏文件) -l 显示所有文件(包括文件的详细信息) 格式: ls 参数 目录路径(绝对/相对) cd 切换目录 格式: cd ...
- WebStorm 2019.3.1 永久破解
PS:动手能力强的来,手残的去淘宝买吧,大概15块钱1年.建议看完后在动手,有一个全局观,浪费不了多少时间 一. 下载破解补丁文件 链接:https://pan.baidu.com/s/16-rPPH ...
- 【笔记】机器学习 - 李宏毅 - 4 - Gradient Descent
梯度下降 Gradient Descent 梯度下降是一种迭代法(与最小二乘法不同),目标是解决最优化问题:\({\theta}^* = arg min_{\theta} L({\theta})\), ...