http://acm.hdu.edu.cn/showproblem.php?pid=2276 #include<iostream> using namespace std; #define N 101 #define FF(i,n) for(int i=0;i<n;i++) int ans[N]; int init[N][N]; void matrixMul(int a[][N],int b[][N],int n,int mod){ int i,j,k; int buf[N][N]={0}; FF(i,n)FF(k,n) if(a[i][k])FF(j,n)if(b[k][j]) buf[i][j]=(buf[i][j]+a[i][k]*b[k][j])%mod; FF(i,n)FF(j,n) a[i][j]=buf[i][j]; } void matrixMul(int a[],int b[][N],int n,int mod){ int i,j; int buf[N]={0}; FF(i,n)FF(j,n) buf[i]=(buf[i]+a[j]*b[i][j])%mod; FF(i,n) a[i]=buf[i]; } void matrixMul(int ans[],int init[][N],int n,int m,int mod){ for(;m;m>>=1){ if(m&1) matrixMul(ans,init,n,mod); matrixMul(init,init,n,mod); } } int main(void){ int m,n,i,j,mod; char ch[N]; while(~scanf("%d",&m)){ scanf("%s",ch); n=strlen(ch); mod=2; FF(i,n) ans[i]=ch[i]-'0'; memset(init,0,sizeof(init)); init[0][0]=init[0][n-1]=1; for(i=1;i<n;i++) init[i][i-1]=init[i][i]=1; matrixMul(ans,init,n,m,mod); FF(i,n) printf("%d",ans[i]); printf("/n"); } }