HDOJ-1041 Computer Transformation(找规律+大数运算)
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(找规律+大数运算)的更多相关文章
- HDU 1041 Computer Transformation(找规律加大数乘)
主要还是找规律,然后大数相乘 #include<stdio.h> #include<string.h> #include<math.h> #include<t ...
- HDU 1041 Computer Transformation (简单大数)
Computer Transformation http://acm.hdu.edu.cn/showproblem.php?pid=1041 Problem Description A sequenc ...
- Computer Transformation(规律,大数打表)
Computer Transformation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- Computer Transformation(简单数学题+大数)
H - Computer Transformation Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d &am ...
- HDU 1041 Computer Transformation 数学DP题解
本题假设编程是使用DP思想直接打表就能够了. 假设是找规律就须要数学思维了. 规律就是看这些连续的0是从哪里来的. 我找到的规律是:1经过两次裂变之后就会产生一个00: 00经过两次裂变之后也会产生新 ...
- UVA 10254 - The Priest Mathematician (dp | 汉诺塔 | 找规律 | 大数)
本文出自 http://blog.csdn.net/shuangde800 题目点击打开链接 题意: 汉诺塔游戏请看 百度百科 正常的汉诺塔游戏是只有3个柱子,并且如果有n个圆盘,至少需要2^n- ...
- hdu 4952 Number Transformation (找规律)
题目链接 题意:给你个x,k次操作,对于第i次操作是:要找个nx,使得nx是>=x的最小值,且能整除i,求k次操作后的数 分析: 经过打表找规律,会发现最后的x/i,这个倍数会趋于一个固定的值, ...
- Resistors in Parallel(找规律+大数)
题意:https://codeforces.com/group/ikIh7rsWAl/contest/254825/problem/E 给你一个n,计算n / Sigma(1~n)的d(是n的只出现一 ...
- 2019 ICPC Asia Nanchang Regional C And and Pair 找规律/位运算/dp
题意: 给定一个二进制表示的n,让你找满足如下要求的数对(i,j)的个数 $0 \leqslant j \leqslant i \leqslant n$ $ i & n = i $ $ i & ...
随机推荐
- svn add后的数据如何取消-svn revert??--zz
svn add后的数据如何取消-svn revert?? 有时候你发现svn add后,这个提交的数据又不需要了.这时候需要有svn revert来处理了. 原文链接:http://hi.baidu. ...
- UESTC_棋盘游戏 CDOJ 578
最近昀昀学习到了一种新的棋盘游戏,这是一个在一个N×N的格子棋盘上去搞M个棋子的游戏,游戏的规则有下列几条: 棋盘上有且仅有一个出口 开始时没有哪个棋子在出口,而且所有棋子都不相邻(这里的相邻是指上下 ...
- Remove Element 解答
Question Given an array and a value, remove all instances of that value in place and return the new ...
- Unix命令行学习
Listing files and directories ls 显示你当前目录的文件 ls -a 显示你千亩目录的文件(包括隐藏文件)ls <name1>/<name2> 显 ...
- TI芯片android环境搭建和编译
1>. Reading package lists... Done Building dependency tree Reading state information... Do ...
- js查找和过滤
通常情况下选择器可以直接定位到我们想要的元素,但是,当我们拿到一个jQuery对象后,还可以以这个对象为基准,进行查找和过滤. 最常见的查找是在某个节点的所有子节点中查找,使用find()方法,它本身 ...
- SVN:冲突解决 合并别人的修改
在项目中,基本不可避免多个人同时参与一个项目,因此就可能会出现多个人同时修改一个文件的情况,就不可避免的会出现冲突.svn已经很聪明了,如 果你和别人对于同一个文件的修改之间不存在重叠(比如你在文件最 ...
- JavaScript-打开新窗口
open()方法可以查找一个已经存在或者新建一个新的浏览器窗口. 语法:window.open([URL], [窗口名称], [参数字符串]) 参数解释: URL:可选参数,在窗口中显示网页的网址或路 ...
- iOS加密个人见解
说说常用的加密方式 1.单向加密,譬如 md5 .SHA 但是这种单向加密安全性也不高了,现在cpu.gpu都那么强大,运算速度很快,彩虹表 撞库 还是容易被攻破的. 如果非得用的话,可以md5加盐, ...
- 开源 java CMS - FreeCMS1.9公布。
FreeCMS商业版V1.9更新功能 添加Oracle数据库支持.