【Luogu】P4159迷路(矩阵优化)
2024-10-17 13:28:26
将每个点拆成时刻1~9,然后根据题目要求连边,比如i-j有一条权为x的边就从点i-x向点j-1连一条边,表示经过x次之后可以到达。
然后就矩阵快速幂乱搞就好了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#include<cstdlib>
#define maxn 105
#define mod 2009
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} int lim; struct Matrix{
long long s[maxn][maxn];
void clear(){memset(s,,sizeof(s)); }
}; Matrix operator *(Matrix a,Matrix b){
Matrix ans; ans.clear();
for(int i=;i<=lim;++i)
for(int j=;j<=lim;++j)
for(int k=;k<=lim;++k) ans.s[i][j]=(ans.s[i][j]+a.s[i][k]*b.s[k][j]%mod)%mod;
return ans;
} Matrix Pow(Matrix a,long long b){
Matrix ret; ret.clear();
for(int i=;i<=maxn;++i) ret.s[i][i]=;
while(b){
if(b&) ret=ret*a;
a=a*a;
b>>=;
}
return ret;
} int n; int calc(int a,int b){ return a+(b-)*n; } char c[maxn]; int main(){
Matrix sta; sta.clear();
n=read();long long t=read();lim=n*;
for(int i=;i<=n;++i){
for(int j=;j<;++j) sta.s[calc(i,j)][calc(i,j+)]++;
scanf("%s",c+);
for(int j=;j<=n;++j){
int x=c[j]-'';
if(x==) continue;
for(int k=;k+x-<=;++k) sta.s[calc(i,x+k-)][calc(j,+k-)]++;
}
}
sta=Pow(sta,t);
//for(int i=1;i<=lim;++i,printf("\n"))
// for(int j=1;j<=lim;++j) printf("%lld ",sta.s[i][j]);
printf("%lld",sta.s[][n]);
return ;
}
最新文章
- CSRF 攻击介绍
- div在浏览器窗口中居中
- ASP.NET MVC 获取当前访问域名
- Linq专题之Linq查询from子句
- (Ios 实战) 自定义UITableView
- SVN hooks强制提交时填写日志
- z-index总结【转载http://www.cnblogs.com/mind/archive/2012/04/01/2198995.html】
- 综合经验:IO读写错误必然导致程序崩溃
- [Ext JS 4] 实战之 Picker 和 Picker Field
- Angularjs -- 核心概念
- 基于ASIO的协程与网络编程
- 第三篇:RESTful介绍
- OSGi-简介(01)
- 图像检索(6):局部敏感哈希索引(LSH)
- asp.net mvc前台显示带htm标签的解决办法(Razor —@Html.Raw())
- ExtJS学习之MessageBox
- butter
- TLS/HTTPS 证书生成与验证
- 关于Q-LEARNING的优化
- [tools]hugo&;github构建静态网站/百度统计
热门文章
- python_71_json序列化1
- JZOJ 5818. 【NOIP提高A组模拟2018.8.15】 做运动
- Python入门必学:递归函数正确的操作使用方法,案例详解
- django之配置静态文件
- vncserver 启动停止方式
- 2017 United Kingdom and Ireland Programming(Gym - 101606)
- Codeforces Round #461 (Div. 2) D. Robot Vacuum Cleaner
- python os模块进程函数
- Python及其常用模块库下载及安装
- 1568: [JSOI2008]Blue Mary开公司(超哥线段树)