加里敦星球的人们特别喜欢喝可乐。因而,他们的敌对星球研发出了一个可乐机器人,并且
放在了加里敦星球的1号城市上。这个可乐机器人有三种行为:停在原地,去下一个相邻的
城市,自爆。它每一秒都会随机触发一种行为。现在给出加里敦星球城市图,在第0秒时可
乐机器人在1号城市,问经过了t秒,可乐机器人的行为方案数是多少?
标签:include 意义 out 道路 多少 string 答案 esc cst
输出可乐机器人的行为方案数,答案可能很大,请输出对2017取模后的结果。
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define MOD (2017) 5 using namespace std; 6 7 int n,m,ans,u,v,t; 8 9 struct Matrix 10 { 11 int m[32][32]; 12 void clear(){memset(m,0,sizeof(m));} 13 }A,G; 14 15 Matrix operator * (Matrix a,Matrix b) 16 { 17 Matrix ans; ans.clear(); 18 for (int i=1; i<=n+1; ++i) 19 for (int j=1; j<=n+1; ++j) 20 for (int k=1; k<=n+1; ++k) 21 (ans.m[i][j]+=a.m[i][k]*b.m[k][j])%=MOD; 22 return ans; 23 } 24 25 Matrix Qpow(Matrix a,int p) 26 { 27 Matrix ans; ans.clear(); 28 for (int i=1; i<=n+1; ++i) ans.m[i][i]=1; 29 while (p) 30 { 31 if (p&1) ans=ans*a; 32 a=a*a; p>>=1; 33 } 34 return ans; 35 } 36 37 int main() 38 { 39 scanf("%d%d",&n,&m); 40 for (int i=1; i<=m; ++i) 41 { 42 scanf("%d%d",&u,&v); 43 G.m[u][v]=G.m[v][u]=1; 44 } 45 for (int i=1; i<=n+1; ++i) 46 G.m[i][n+1]=1,G.m[i][i]=1; 47 scanf("%d",&t); 48 G=Qpow(G,t); 49 for (int i=1; i<=n+1; ++i) 50 (ans+=G.m[1][i])%=MOD; 51 printf("%d",ans); 52 }
标签:include 意义 out 道路 多少 string 答案 esc cst
原文地址:https://www.cnblogs.com/refun/p/9380785.html