Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33241 | LYLAKIOI | 【S】T2 | C++ | 解答错误 | 30 | 1085 MS | 11992 KB | 1863 | 2024-10-04 17:37:15 |
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define p_b push_back #define m_p make_pair typedef long long ll; using namespace std; const int maxn=2e5+10,mod=1e9+7; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,m,TT; int tag[int(2e6)+10]; int qpow(int a,int b){ int res=1; while(b){ if(b&1)res=res*1ll*a%mod; a=a*1ll*a%mod;b>>=1; }return res; } struct mat { int n,m; int t[75][75]; void clear(){ n=m=0;memset(t,0,sizeof(t)); } }T[2005],nw; mat operator*(mat a,mat b){ mat c;c.clear();c.n=a.n,c.m=b.m; up(i,1,a.n)up(j,1,b.m)up(k,1,a.m)(c.t[i][j]+=a.t[i][k]*1ll*b.t[k][j]%mod)%=mod; return c; } void slv(){ n=read(),m=read(),TT=read(); int B=min(2000,(int)sqrt(TT/n)); up(i,1,n){ string s;cin>>s;s=" "+s;int ct=0; up(j,1,n)if(s[j]=='1')ct++; up(j,1,n)if(s[j]=='1')T[1].t[i][j]=qpow(ct,mod-2); }T[1].n=T[1].m=n; up(i,2,B)T[i]=T[i-1]*T[1]; T[0].n=T[1].m=n; up(i,1,n)T[0].t[i][i]=1; up(i,1,m){ int x=read(),p=read(); tag[x]=p; }int res=0,p=0; nw.n=1,nw.m=n; up(i,1,TT){ if(i%B==0||tag[i]){ p++;nw=nw*T[p];p=0; if(tag[i])(nw.t[1][tag[i]]+=1)%=mod; }else p++; int ans=0; up(j,1,n)(ans+=T[p].t[1][j]*1ll*nw.t[j][n]%mod)%=mod; res^=ans; }cout<<res; }int main(){ //freopen("sequence.in","r",stdin); //freopen("sequence.out","w",stdout); slv(); fclose(stdin); fclose(stdout); return 0; }