本文主要是介绍Kiki Little Kiki 2 hdu 2276,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
递推公式F(i)=f(i)^f(i-1).
在这道题目中,"^ "相当于“*”,”&&“相当于“+”,初始化false相当于0。
#include<iostream>
using namespace std;
#define MAX 103
void Mul(bool a[MAX][MAX],bool b[MAX][MAX],bool c[MAX][MAX])
{bool sum=false;int i,j,k;for( i=0;i<MAX;i++)for( j=0;j<MAX;j++){sum=0;for(k=0;k<MAX;k++)sum^=a[i][k]&&b[k][j];c[i][j]=sum;}
}
void Pow(bool a[MAX][MAX],int n)
{if(n<=1)return;bool b[MAX][MAX],c[MAX][MAX];int i,j;for(i=0;i<MAX;i++)for(j=0;j<MAX;j++)c[i][j]=a[i][j];Pow(c,n/2);if(n%2){Mul(a,c,b);Mul(b,c,a);}elseMul(c,c,a);
}
int main()
{char str[MAX];bool b[MAX],c[MAX];bool a[MAX][MAX];int n,len;int i,j,k;while(cin>>n!=0){memset(a,0,sizeof(a));getchar();gets(str);len=strlen(str);for(i=1;i<len;i++)a[i][i]=a[i][i-1]=1;a[0][len-1]=a[0][0]=1;for(i=0;i<len;i++)if(str[i]=='0')b[i]=false;elseb[i]=true;Pow(a,n);bool sum;for(i=0;i<len;i++){sum=false;for(j=0;j<len;j++)sum^=a[i][j]&&b[j];c[i]=sum;}for(i=0;i<len;i++)if(c[i])cout<<"1";elsecout<<"0";cout<<endl; }return 0;
}
这篇关于Kiki Little Kiki 2 hdu 2276的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!