Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33192 | A21μΘ_wjy | 【S】T2 | C++ | 通过 | 100 | 819 MS | 8288 KB | 1908 | 2024-10-04 16:46:38 |
#include<bits/stdc++.h> #define int long long using namespace std; const int N=75; const int mod=1e9+7; const int maxm=1e4+7; const int maxT=2e6+7; int n,m,T; struct Mat{ int M[N][N]; int &operator()(int &i,int &j){ return M[i][j]; } void clr(){memset(M,0,sizeof(M));} void I(){ clr(); for(int i=1;i<=n;i++)M[i][i]=1; } }; Mat operator*(Mat A,Mat B){ Mat res;res.clr(); for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ res(i,j)+=(A(i,k)*B(k,j))%mod; res(i,j)%=mod; } } } return res; } inline int qpow(int a,int b){ int ans=1; while(b){ if(b&1)ans=ans*a%mod; a=a*a%mod; b>>=1; } return ans; } const int B=175; int E[maxT]; Mat G; Mat F[175]; int t[maxm]; int v[maxm]; int dp[507]; int tmp[507]; signed main(){ cin>>n>>m>>T; for(int i=1;i<=n;i++){ int cnt=0; for(int j=1;j<=n;j++){ char t; cin>>t; G(i,j)=t-'0'; cnt+=G(i,j); } for(int j=1;j<=n;j++)G(i,j)=G(i,j)*qpow(cnt,mod-2)%mod; } for(int i=1;i<=m;i++)cin>>t[i]>>v[i]; F[0].I(); for(int i=1;i<B;i++)F[i]=F[i-1]*G; int ans=0; int p=1; int c=0; for(int tim=1;tim<=T;tim++){ bool upd=p<=m&&t[p]==tim; if(c==B-1||upd){ for(int i=1;i<=n;i++)tmp[i]=0; for(int j=1;j<=n;j++)for(int i=1;i<=n;i++){ tmp[i]+=F[c](j,i)*dp[j]%mod; tmp[i]-=(tmp[i]>=mod?mod:0); } for(int i=1;i<=n;i++)dp[i]=tmp[i]; c=0; } if(upd){ dp[v[p]]++; dp[v[p]]%=mod; p++; } int cur=0; for(int i=1;i<=n;i++){ cur+=F[c](i,n)*dp[i]%mod; cur-=(cur>=mod?mod:0); } ans^=cur; c++; } cout<<ans<<endl; return 0; }