暑假选拔赛01 ---- code
2015-07-14 20:17
260 查看
Problem Description
Ytaaa使用一种特殊的编码方式来加密英文字串,即a->1,b->2,…,z->26Ytaaa很快发现相同密文可解读为不同的原字串。ytaaa想知道,对于一个密文,共有多少种解读方式。如26可以解读为 bf或z。
Input
输入包括多组数据,数据仅由数字组成。数字位数最大为1000000,输入数据保证合法。Output
输出每行一个数,代表有几种解读方案。由于数值可能较大,请将结果mod1000000007后输出。Sample Input
26Sample Output
2解题思路
递推dp;dp[i] = dp[i-1];
如果第 i 和 i-1 位能凑成1 ~ 26,且i-1,i,i+1位上的数字都不为0,时, dp[i] += dp[i-2];
参考代码
#include <stdio.h> #include <string.h> #define MOD 1000000007 #define maxn 1000000 typedef __int64 ll; char str[maxn]; ll dp[maxn]; bool judge(int i){ int x = (str[i-1]-'0')*10+str[i]-'0'; return (x >= 1 && x <= 26 && str[i] != '0' && str[i-1] != '0' && str[i+1] != '0'); } int main() { while (~scanf("%s",str)){ memset(dp,0,sizeof(dp)); int len = strlen(str); dp[0] = 1;dp[1] = dp[0]; if (judge(1)) dp[1]++; for (int i = 2;i < len;i++){ dp[i] = dp[i-1]; if (judge(i)) dp[i] += dp[i-2]; dp[i] %= MOD; } printf("%I64d\n",dp[len-1]); } return 0; }
相关文章推荐
- cdlinux有一些优盘或者电脑是不支持的
- SQL常用语句整理
- json_encode只支持UTF8编码的字符
- KVC、KVO
- Linux内核源代码-目录结构
- Cocos2d-x v2.2.2版本+Win7+VS2010环境搭建
- cannot resolve com.example.xx.R
- String, StringBuilder , StringBuffer
- Jquery ajax调用webservice总结
- 静态的应用
- 714日作业
- LeetCode题解——Remove Nth Node From End of List
- 【HDU】【The King’s Ups and Downs】
- CentOS系列操作系统的安装程序anaconda与其配置文件kickstart
- 某文件处理shell脚本的优化经历
- List集合、Map集合、数组的排序
- 避免Android中Context引起的内存泄露
- 键盘记录器
- HDU 1166 敌兵布阵【线段树-单点更新】
- NGUI UIWrapContent小用法