codeforces 593E(矩阵类题目)
来源:互联网 发布:青少年行知实践园地图 编辑:程序博客网 时间:2024/06/05 17:00
给定一个R * C不超过20的图,一开始人在(1,1)然后给出之多100000个时间序列(按时间递增给出),
每个时间可能发生的事情是在某个位置出现猫(有猫的地方人不能存在),猫在某个位置消失,询问人从1,1点在1时刻出发在t时刻可以走到(x , y)的所有可行性路径数目。
分析:
典型的矩阵转移题目。
初始时用一个人d[ i ][ j]....代表人从1,1出发走了当前步数,可以走到1的路径数为i,走到2的路径数目为j,.......
那么转移矩阵 m[ ][ ] 代表的是从i - > j的所有可行路经数目,中间加上矩阵快速幂即可。
#include <bits/stdc++.h>#define fst first#define snd second#define ALL(a) a.begin(), a.end()#define clr(a, x) memset(a, x, sizeof a)#define rep(i,x) for(int i=0;i<(int)x;i++)#define rep1(i,x,y) for(int i=x;i<=(int)y;i++)#define LOGN 22typedef long long ll;using namespace std;const int mod = 1e9 + 7;struct Matrix{ int m[22][22]; void standard(int n){ rep(i,n) rep(j,n) m[i][j]=(i==j); } void show(int n){ rep(i,n){ rep(j,n) cout<<m[i][j]<<" "; cout<<endl; } }};int n;Matrix mul(Matrix A,Matrix B){ Matrix C; rep(i,n) rep(j,n){ C.m[i][j] = 0; rep(k,n) C.m[i][j] =(C.m[i][j] + (ll)A.m[i][k]*B.m[k][j]%mod)%mod; } return C;}Matrix pow_(Matrix A,int c){ Matrix ret ; ret.standard(n); while(c > 0){ if(c & 1) ret=mul(ret,A); A=mul(A,A); c>>=1; } return ret;}const int dx[]={-1 , 0 ,1, 0};const int dy[]={ 0 , 1 ,0,-1};int r , c , q;int main(){ scanf("%d %d %d",&r,&c,&q); n = r * c; Matrix A; A.standard(n); rep(i , r) rep(j , c){ rep(d , 4){ int ni = i + dx[d] , nj = j + dy[d]; if(ni>=0 && ni < r && nj >= 0 && nj < c) A.m[i*c + j][ni*c+nj]=1; } } Matrix all , now; all.standard(n); int pret = 1 , vis[22]={0}; while(q--){ int cmd,x,y,t; scanf("%d %d %d %d",&cmd,&x,&y,&t),--x,--y; rep(i , n) rep(j , n){ if(!vis[i] && !vis[j]) now.m[i][j] = A.m[i][j]; else now.m[i][j] = 0; } all = mul(all , pow_(now , t - pret)); pret = t; if(cmd == 2) vis[x*c + y] = 1; else if(cmd == 3)vis[x*c + y] = 0; else if(cmd == 1) printf("%d\n",all.m[0][x*c + y]); } return 0;}
0 0
- codeforces 593E(矩阵类题目)
- Codeforces 514E 矩阵快速幂
- codeforces 593E
- CodeForces 593E
- codeforces#263 ABCD题总结以及D构思E题目。
- Codeforces 765E. Tree Folding 题目详解+错点记录
- Codeforces Round #432 (Div. 2)C,D,E题目详解
- Codeforces Round #433(Div.2) C,D,E题目详解
- Codeforces Round #430(Div.2) C,D,E题目详解
- Codeforces Round #437B,C,D,E题目详解
- Codeforces Round #291 (Div. 2)E(DP+矩阵)
- Codeforces Round #113 (Div. 2)E---Tetrahedron(矩阵,水题)
- Codeforces 621E Wet Shark and Blocks 【矩阵加速dp】
- Codeforces #341 E. Wet Shark and Blocks dp 矩阵优化
- Codeforces 691E Xor-sequences【矩阵快速幂,好题】
- Codeforces 691E Xor-sequences(矩阵快速幂)
- Codeforces 691 E Xor-sequences 矩阵快速幂
- CodeForces-691E Xor-sequences(矩阵快速幂)
- Python的zip函数
- 编程之美-斐波那契(Fibonacci)数列方法整理
- 电子签章
- 开发利器--JSONVIEW插件 网页json数据直接转换
- 分布式与集群的区别
- codeforces 593E(矩阵类题目)
- Android中的Parcel机制 实现Bundle传递对象
- java访问修饰符(public……)
- php 框架 laravel安装
- 【深入Java虚拟机】之八:Java垃圾收集机制
- 点击空白处回收键盘
- 网络常用的数据结构
- 禁止ViewPager向右滑动
- 国外PHP学习网站书籍资料汇总