P1096 [NOIP2007 普及组] Hanoi 双塔问题

f[n]=2*f[n-1]+2

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
#define ll long long
#define ddd printf("-----------------debug\n");
using namespace std;

int n;
struct lxt
{
    int len,ans[1000];
}f[300];

lxt jia(lxt x,lxt y)
{
    lxt Ans;
    memset(Ans.ans,0,sizeof(Ans.ans));
    
    for(int i=1;i<=max(x.len,y.len);i++) Ans.ans[i]=x.ans[i]+y.ans[i];
    for(int i=1;i<=max(x.len,y.len);i++){
        Ans.ans[i+1]+=Ans.ans[i]/10;
        Ans.ans[i]=Ans.ans[i]%10;
    }
    if(Ans.ans[max(x.len,y.len)+1]) Ans.len=max(x.len,y.len)+1;
    else Ans.len=max(x.len,y.len);
    
    return Ans;
}
void work(int n)
{
    f[1].ans[1]=2; f[1].len=1;   f[0].ans[1]=2; f[0].len=1;
    for(int i=2;i<=n;i++)
        f[i]=jia( jia(f[i-1],f[i-1]),f[0] );
        
    for(int i=f[n].len;i>=1;i--) cout<<f[n].ans[i];
    cout<<endl;
}
int main()
{
    ios::sync_with_stdio(false);
    cin>>n;
    work(n);
    
    return 0;
}
View Code
 

 

 
posted @ 2023-07-13 08:16  JMXZ  阅读(54)  评论(0)    收藏  举报