zoukankan      html  css  js  c++  java
  • 【解题报告】洛谷P1096 Hanoi双塔问题

    【解题报告】洛谷P1096 Hanoi双塔问题

    题目链接

    https://www.luogu.com.cn/problem/P1096

    思路

    一个普通的汉诺塔的变形问题

    策略和普通的一样

    上面的 ((n-1) imes 2) 层先移到B上然后把最后两个移动到C上,最后把B上面的移动到C上

    (f[i]) 表示把 (2i) 层完成的步骤

    然后就有 (f[i]=2 imes f[i-1]+2) 边界是 (f[1]=2)

    然后发现数据最后比较大,"数据之大,long long装不下"

    然后我们加一个高精度就完了

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    using namespace std;
    const int maxn=2500;
    char s[maxn];
    struct gaojing{
    	int n,z[maxn];
    	gaojing()
    	{
    		n=1;
    		memset(z,0,sizeof(z));
    	}
    	void init()
    	{
    		scanf("%s",s+1);
    		int len=strlen(s+1);
    		reverse(s+1,s+len+1);
    		n=len;
    		for(int i=1;i<=n;i++)
    		z[i]=s[i]-'0';
    	}
    	void print()
    	{
    		for(int i=n;i>=1;i--)
    		cout<<z[i];
    	}
    };
    gaojing operator+(const gaojing &a,const gaojing &b)
    {
    	gaojing c;
    	c.n=max(a.n,b.n);
    	for(int i=1;i<=c.n;i++)
    	c.z[i]=a.z[i]+b.z[i];
    	for(int i=1;i<=c.n;i++)
    	{
    		c.z[i+1]+=c.z[i]/10;
    		c.z[i]=c.z[i]%10;
    	}
    	if(c.z[c.n+1]!=0) c.n++;
    	return c;
    }
    gaojing operator*(const gaojing &a,const gaojing &b)
    {
    	gaojing c;
    	c.n=a.n+b.n;
    	for(int i=1;i<=a.n;i++)
    	{
    		for(int j=1;j<=b.n;j++)
    		c.z[i+j-1]+=a.z[i]*b.z[j]; 
    	}
    	for(int i=1;i<=c.n;i++)
    	{
    		c.z[i+1]+=c.z[i]/10;
    		c.z[i]=c.z[i]%10;
    	}
    	while(c.n!=1&&c.z[c.n]==0) c.n--;
    	return c;
    }
    int n;
    gaojing f[205];
    int main()
    {
    	cin>>n;
    	gaojing two;
    	two.n=1;
    	two.z[1]=2;
    	f[1]=two;
    	for(int i=2;i<=n;i++)
    	f[i]=two*f[i-1]+two;
    	f[n].print();
    	return 0;
    }
    
    本博文为wweiyi原创,若想转载请联系作者,qq:2844938982
  • 相关阅读:
    数据对象映射模式
    策略模式
    适配模式
    注册模式
    单例模式
    工厂模式
    PHP魔法方法的使用
    【转】通过 ulimit 改善系统性能
    HDMI相关知识
    中国三种3G网络频段
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/15428331.html
Copyright © 2011-2022 走看看