1 #include<stdio.h>
2 #include<string.h>
3 char s[105];
4 int ans[105],temp[105],temp1[105][105],a[105][105];
5 int main()
6 {
7 int i,j,k,n,m;
8 while (~scanf("%d",&m))
9 {
10 getchar();
11 gets(s); n=strlen(s);
12 for (i=1;i<=n;i++) ans[i]=s[i-1]-'0';
13 memset(a,0,sizeof(a));
14 for (i=1;i<=n;i++)
15 if (i!=n) a[i][i]=a[i][i+1]=1;
16 else a[i][1]=a[i][n]=1;
17 while (m!=0)
18 {
19 if (m%2==1)
20 {
21 for (j=1;j<=n;j++)
22 {
23 temp[j]=0;
24 for (i=1;i<=n;i++) temp[j]=(temp[j]+ans[i]*a[i][j])%2;
25 }
26 for (i=1;i<=n;i++) ans[i]=temp[i];
27 }
28 m/=2;
29 {
30 memset(temp1,0,sizeof(temp1));
31 for (i=1;i<=n;i++)
32 for (j=1;j<=n;j++)
33 {
34 for (k=1;k<=n;k++)
35 temp1[i][j]=(temp1[i][j]+a[i][k]*a[k][j])%2;
36 }
37 for (i=1;i<=n;i++)
38 for (j=1;j<=n;j++) a[i][j]=temp1[i][j];
39 }
40 }
41 for (i=1;i<=n;i++) printf("%d",ans[i]);
42 printf("\n");
43 }
44 }
http://acm.hdu.edu.cn/showproblem.php?pid=2276