Computer Transformation(规律,大数打表)
Computer Transformation
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6946 Accepted Submission(s): 2515
Problem Description
A
sequence consisting of one digit, the number 1 is initially written
into a computer. At each successive time step, the computer
simultaneously tranforms each digit 0 into the sequence 1 0 and each
digit 1 into the sequence 0 1. So, after the first time step, the
sequence 0 1 is obtained; after the second, the sequence 1 0 0 1, after
the third, the sequence 0 1 1 0 1 0 0 1 and so on.
How many pairs of consequitive zeroes will appear in the sequence after n steps?
How many pairs of consequitive zeroes will appear in the sequence after n steps?
Input
Every input line contains one natural number n (0 < n ≤1000).
Output
For each input n print the number of consecutive zeroes pairs that will appear in the sequence after n steps.
Sample Input
2
3
Sample Output
1
1
题解:f(n)=2*f(n-2)+f(n-1)由于每个n-2的00生成两个01,在n的地方就会生成两个00;n-1的00在n生成一个00;由此可以找出规律;
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 #define mem(x,y) memset(x,y,sizeof(x)) 8 typedef long long LL; 9 const int MAXN=1010; 10 char dp[MAXN][MAXN]; 11 char c[MAXN]; 12 int x[MAXN],y[MAXN],z[MAXN]; 13 void bigsum(char *a,char *b){ 14 int len1,len2; 15 mem(x,0);mem(y,0);mem(z,0); 16 len1=strlen(a);len2=strlen(b); 17 int len=max(len1,len2); 18 for(int i=len1-1,j=0;i>=0;i--,j++)x[j]=a[i]-'0'; 19 for(int i=len2-1,j=0;i>=0;i--,j++)y[j]=b[i]-'0'; 20 for(int i=0;i<len;i++){ 21 z[i]=x[i]+y[i]+z[i]; 22 z[i+1]+=z[i]/10; 23 z[i]%=10; 24 if(z[len])len++; 25 } 26 for(int i=len-1,j=0;i>=0;i--,j++)c[j]=z[i]+'0'; 27 c[len]='\0'; 28 } 29 int main(){ 30 int n; 31 dp[1][0]='0';dp[1][1]='\0'; 32 dp[2][0]='1';dp[2][1]='\0'; 33 for(int i=3;i<=1000;i++){ 34 bigsum(dp[i-1],dp[i-2]); 35 bigsum(c,dp[i-2]); 36 memcpy(dp[i],c,sizeof(c)); 37 } 38 while(~scanf("%d",&n)){ 39 printf("%s\n",dp[n]); 40 } 41 return 0; 42 }