• UVA 1647 Computer Transformation


    https://vjudge.net/problem/UVA-1647

    题意:

    开始有一个1,接下来每一步1变成01,0变成10

    问n不之后00的个数

    打表找规律

    第3步之后:

    如果第i步之后有x个字符,

    那么第i+1步之后 的后x个字符与第i步一样

    前x个字符是第i步取反

    所以00得个数由三部分组成

    1、上一步00的个数

    2、上一步11的个数

    3、当i为偶数时,前x个字符的最后一个是0,后x个字符的第一个是0,00个数+1

    f[i][0]=f[i-1][0]+f[i-1][1]+!(i&1)

    f[i][1]=f[i-1][0]+f[i-1][1]

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    struct BigInteger
    {
        int len;
        int num[10001];
        BigInteger() { len=0; memset(num,0,sizeof(num));}
        BigInteger operator + (BigInteger p) const
        {
            BigInteger b;
            b.len=max(len,p.len);
            int x=max(len,p.len);
            for(int i=1;i<=x;i++)
            {
                b.num[i]+=num[i]+p.num[i];
                b.num[i+1]=b.num[i]/10;
                b.num[i]%=10;
            }
            if(b.num[x+1]) x++;
            b.len=x;
            return b;
        }
        void operator = (BigInteger p) 
        {
            this->len=p.len;
            for(int i=1;i<=len;i++) this->num[i]=p.num[i];
        } 
        void print()
        {
            for(int i=len;i;i--) printf("%d",num[i]);
            printf("
    ");
        }
    };
    BigInteger f[1001][2];
    BigInteger e;
    int main()
    {
        f[1][0].len=1;
        f[1][0].num[1]=0;
        f[2][0].len=1;
        f[2][0].num[1]=1;
        e.len=1; 
        e.num[1]=1;
        for(int i=3;i<=1000;i++) 
        {
            f[i][1]=f[i-1][0]+f[i-1][1];
            if(i&1)  f[i][0]=f[i-1][0]+f[i-1][1];
            else f[i][0]=f[i-1][0]+f[i-1][1]+e;
        }
        int n;
        while(scanf("%d",&n)!=EOF) f[n][0].print();
    }
  • 相关阅读:
    大型网站随着业务的增长架构演进
    springboot日志logback配置
    一些容易出错的细节
    从一个下载优化说起
    徒手优化冒泡排序
    php设计模式之观察者模式
    php设计模式之抽象工厂模式
    phper談談最近重構代碼的感受(3)
    php设计模式----工厂模式
    偏执的我从Linux到Windows的感受
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/7412706.html
Copyright © 2020-2023  润新知