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[];
BigInteger() { len=; memset(num,,sizeof(num));}
BigInteger operator + (BigInteger p) const
{
BigInteger b;
b.len=max(len,p.len);
int x=max(len,p.len);
for(int i=;i<=x;i++)
{
b.num[i]+=num[i]+p.num[i];
b.num[i+]=b.num[i]/;
b.num[i]%=;
}
if(b.num[x+]) x++;
b.len=x;
return b;
}
void operator = (BigInteger p)
{
this->len=p.len;
for(int i=;i<=len;i++) this->num[i]=p.num[i];
}
void print()
{
for(int i=len;i;i--) printf("%d",num[i]);
printf("\n");
}
};
BigInteger f[][];
BigInteger e;
int main()
{
f[][].len=;
f[][].num[]=;
f[][].len=;
f[][].num[]=;
e.len=;
e.num[]=;
for(int i=;i<=;i++)
{
f[i][]=f[i-][]+f[i-][];
if(i&) f[i][]=f[i-][]+f[i-][];
else f[i][]=f[i-][]+f[i-][]+e;
}
int n;
while(scanf("%d",&n)!=EOF) f[n][].print();
}

UVA 1647 Computer Transformation的更多相关文章

  1. UVA - 1647 Computer Transformation(计算机变换)(找规律)

    题意:初始串为一个1,每一步会将每个0改成10,每个1改成01,因此1会依次变成01,1001,01101001,……输入n(n<=1000),统计n步之后得到的串中,"00" ...

  2. HDU 1041 Computer Transformation (简单大数)

    Computer Transformation http://acm.hdu.edu.cn/showproblem.php?pid=1041 Problem Description A sequenc ...

  3. Computer Transformation(规律,大数打表)

    Computer Transformation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  4. hdu_1041(Computer Transformation) 大数加法模板+找规律

    Computer Transformation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  5. (大数)Computer Transformation hdu1041

    Computer Transformation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  6. Computer Transformation(简单数学题+大数)

    H - Computer Transformation Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &am ...

  7. UVa 1647 (递推) Computer Transformation

    题意: 有一个01串,每一步都会将所有的0变为10,将所有的1变为01,串最开始为1. 求第n步之后,00的个数 分析: 刚开始想的时候还是比较乱的,我还纠结了一下000中算是有1个00还是2个00 ...

  8. Computer Transformation(hdoj 1041)

    Problem Description A sequence consisting of one digit, the number 1 is initially written into a com ...

  9. ACM学习历程—HDU1041 Computer Transformation(递推 && 大数)

    Description A sequence consisting of one digit, the number 1 is initially written into a computer. A ...

随机推荐

  1. Android 中调用本地命令

    Android 中调用本地命令 通常来说,在 Android 中调用本地的命令的话,一般有以下 3 种情况: 调用下也就得了,不管输出的信息,比如:echo Hello World.通常来说,这种命令 ...

  2. 1.2Linux下C语言开发基础(学习过程)

    ===============第二节  Linux下C语言开发基础=========== ********************** 重要知识点总结梳理********************* 一 ...

  3. MyEclipse快捷方式

    选择你要注释的那一行或多行代码,按Ctrl+/即可,取消注释也是选中之后按Ctrl+/即可. 如果你想使用的快捷键的注释是的话,那么你的快捷键是ctrl+shift+/我以前都是手动注释的,直接打// ...

  4. 设计 Azure SQL 数据库,并使用 C# 和 ADO.NET 进行连接

    标题:设计 Azure SQL 数据库,并使用 C# 和 ADO.NET 进行连接 里面有使用C#使用SqlServer的例子.

  5. L1正则化与L2正则化的理解

    1. 为什么要使用正则化   我们先回顾一下房价预测的例子.以下是使用多项式回归来拟合房价预测的数据:   可以看出,左图拟合较为合适,而右图过拟合.如果想要解决右图中的过拟合问题,需要能够使得 $ ...

  6. mui.ajax与服务器(SpringMVC)传输json数据

    跨域问题 PC端为了安全,所以禁止跨域.而我使用mui做移动web时,难免会使用pc浏览器进行调试.mui.ajax是允许跨域的.为了可以调试成功,需要对浏览器进行设置及.以360急速浏览器为例,设置 ...

  7. Websphere Application Server 环境配置与应用部署最佳实践

    在发布一个运行于 WebSphere Application Server 的 J2EE 应用之前,对服务器进行配置和部署应用是必不可少的一个过程,这个过程是非常复杂的.WAS 为用户提供了可视化的管 ...

  8. [微软官网]One Windows Kernel

    One Windows Kernel https://techcommunity.microsoft.com/t5/Windows-Kernel-Internals/One-Windows-Kerne ...

  9. (转)微软借力.NET开源跨平台支持,布局物联网平台开发

    今天科技类最大的新闻,莫过于微软宣布.NET开发框架开源计划..NET 开源,集成 Clang 和 LLVM 并且自带 Android 模拟器,这意味着 Visual Studio 这个当下最好没有之 ...

  10. phaser的小游戏的onInputDown问题

    group.inputEnableChildren = true; for (var i = 0; i < 10; i++) {          var sprite = group.crea ...