http://acm.hdu.edu.cn/showproblem.php?pid=1041

有一个初始只有一个1的串 每次都按①0 -> 10;②1 -> 01;这两条规则进行替换

形如:n = 1  1

   n = 2  01

   n = 3  1001

   ...

求经过n步替换之后 串中只含复数个0的连续子串(不难发现,这种子串只能是‘00’)的出现次数

因为0<n<=1000的限制 在最坏情况下(n==1000)串的长度将达到2^1000位 排除了直接模拟上述替换过程的可能

列出前几项的替换结果:

n = 0                       1  ‘00’=0  ‘01’=0
n = 1                       01  ‘00’=0  ‘01’=1
n = 2                     1001  ‘00’=1  ‘01’=0
n = 3                   01101001  ‘00’=1  ‘01’=2
n = 4              1001011001101001  ‘00’=3  ‘01’=2
n = 5   01101001100101101001011001101001  ‘00’=5  ‘01’=6

在上面的数据 不仅给出结果串 还统计出了串中‘00’对和‘01’对的个数【注:‘01’的个数是取出全部的‘00’对后才统计】

从n = 3开始 观察可以发现 01 -> 1001    即每个00对(1001)都是由01对转化而来

而每个00对(1001)又将产生一个 00对 和 两个 01对(见n=2->3)

由上述可得 n步时00对的个数 = n-1步的00对的个数 + n-1的01对的个数(即n-2步的00对的个数 * 2)

所以可以推得 f(n) = f(n - 1) + f(n - 2) * 2

如果细心的话,可以发现,当n大到一定程度时,由于上面给出的公式有着与斐波拉契数列相似的递增效应, 最终结果的数值会非常大大大大大,用__int64都远远无法满足

所以采用字符数组来模拟大数加法运算

# include <stdio.h>
# include <string.h>
# define MAX 1001
# define LEN 1001 char Number[MAX][LEN]; void BigNumPlus()
{
for(int i = 3; i < MAX; i++)
{
memset(Number[i], '0', LEN);//初始化 for(int j = 0; j < LEN; j++)//模拟公式
{
Number[i][j] += (Number[i - 1][j] - '0') + (Number[i - 2][j] - '0') + (Number[i - 2][j] - '0');
} for(int j = 0; j < LEN; j++)//处理进位
{
if(Number[i][j] > '9')
{
Number[i][j + 1] += (Number[i][j] - '0') / 10;
Number[i][j] = (Number[i][j] - '0') % 10 + '0';
}
}
}
} int main()
{
//初始值
memset(Number[1], '0', LEN);
memset(Number[2], '0', LEN);
Number[1][0] = '0';
Number[2][0] = '1'; BigNumPlus(); int n;
while(scanf("%d",&n) != EOF)
{
if(n == 1)//特殊处理
{
printf("0\n");
continue; }
for(int i = LEN - 1; i >= 0; i--)
{
if(Number[n][i] != '0')//格式输出
{
while(i >= 0) printf("%c",Number[n][i--]);
printf("\n");
break;
}
}
} return 0;
}

  

HDOJ-1041 Computer Transformation(找规律+大数运算)的更多相关文章

  1. HDU 1041 Computer Transformation(找规律加大数乘)

    主要还是找规律,然后大数相乘 #include<stdio.h> #include<string.h> #include<math.h> #include<t ...

  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. Computer Transformation(简单数学题+大数)

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

  5. HDU 1041 Computer Transformation 数学DP题解

    本题假设编程是使用DP思想直接打表就能够了. 假设是找规律就须要数学思维了. 规律就是看这些连续的0是从哪里来的. 我找到的规律是:1经过两次裂变之后就会产生一个00: 00经过两次裂变之后也会产生新 ...

  6. UVA 10254 - The Priest Mathematician (dp | 汉诺塔 | 找规律 | 大数)

    本文出自   http://blog.csdn.net/shuangde800 题目点击打开链接 题意: 汉诺塔游戏请看 百度百科 正常的汉诺塔游戏是只有3个柱子,并且如果有n个圆盘,至少需要2^n- ...

  7. hdu 4952 Number Transformation (找规律)

    题目链接 题意:给你个x,k次操作,对于第i次操作是:要找个nx,使得nx是>=x的最小值,且能整除i,求k次操作后的数 分析: 经过打表找规律,会发现最后的x/i,这个倍数会趋于一个固定的值, ...

  8. Resistors in Parallel(找规律+大数)

    题意:https://codeforces.com/group/ikIh7rsWAl/contest/254825/problem/E 给你一个n,计算n / Sigma(1~n)的d(是n的只出现一 ...

  9. 2019 ICPC Asia Nanchang Regional C And and Pair 找规律/位运算/dp

    题意: 给定一个二进制表示的n,让你找满足如下要求的数对(i,j)的个数 $0 \leqslant j \leqslant i \leqslant n$ $ i & n = i $ $ i & ...

随机推荐

  1. C#安装程序制作让安装后的程序开机自动运行

    1.创建安装项目后要在自己的解决方案是添加一个新的类库项目(ClassLibrary1),并在新类库中添加一下安装程序类(Installer1),在Installer1类中添加如下代码: string ...

  2. XML文档形式&JAVA抽象类和接口的区别&拦截器过滤器区别

    XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? a: 两种形式 dtd schemab: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发 ...

  3. UESTC_温泉旅店 CDOJ 878

    天空飘下一朵一朵的雪花,这是一片纯白的世界. 在天空之下的温泉旅店里,雪菜已醉倒在一旁,冬马与春希看了看说着梦话的雪菜,决定找一点玩的来度过这愉快的晚上. 这家旅店提供一种特色游戏,游戏有n张牌,各写 ...

  4. python使用post登陆电子科大信息门户并保存登陆后页面

    python使用post登陆电子科大信息门户并保存登陆后页面 作者:vpoet mail:vpoet_sir@163.com #coding=utf-8 import HTMLParser impor ...

  5. oracle获取某一字段字符串长度

    用length方法 select t.* from tp_area t where substr(t.area_id,0,2)='03' and length(t.area_id)>2

  6. 委托、Lambda表达式

    本文来自:http://wenku.baidu.com/link?url=o9Xacr4tYocCPhivayRQXfIc9kOZeWBwPn2FZfeF19P4-8YX5CMXs74WB-Y8t0S ...

  7. android createbitmap函数内存溢出,求解怎样进行处理out of memory溢出问题

    android createbitmap函数内存溢出,求解怎样进行处理out of memory溢出问题 android createbitmap函数内存溢出,求解怎样进行处理out of memor ...

  8. 2014年百度之星资格赛第二题Disk Schedule

    Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取. 然而,在现实中,这样的做法非常复杂. 我们考虑一个相对简单的场景. ...

  9. 实现怎样支持Android重力感应器Sensor编程

    添加当重力变化时的处理函数 在创建监听器时调用的函数 doSomething(x, y, z) 是自己定义的方法. 当手机倾斜方向改变时,监听器会调用该方法. 我们要做的,就是填充该方法,用于在重力发 ...

  10. UVA 12232 - Exclusive-OR(带权并查集)

    UVA 12232 - Exclusive-OR 题目链接 题意:有n个数字.一開始值都不知道,每次给定一个操作,I a v表示确认a值为v,I a b v,表示确认a^b = v,Q k a1 a2 ...