1001. Alphacode

Constraints

Time Limit: 1 secs, Memory Limit: 32 MB

Description

Alice and Bob need to send secret messages to each other and are discussing ways to encode their messages: Alice: "Let's just use a very simple code: We'll assign `A' the code word 1, `B' will be 2, and so on down to `Z' being assigned 26." Bob: "That's a stupid code, Alice. Suppose I send you the word `BEAN' encoded as 25114. You could decode that in many different ways!" Alice: "Sure you could, but what words would you get? Other than `BEAN', you'd get `BEAAD', `YAAD', `YAN', `YKD' and `BEKD'. I think you would be able to figure out the correct decoding. And why would you send me the word `BEAN' anyway?" Bob: "OK, maybe that's a bad example, but I bet you that if you got a string of length 500 there would be tons of different decodings and with that many you would find at least two different ones that would make sense." Alice: "How many different decodings?" Bob: "Jillions!" For some reason, Alice is still unconvinced by Bob's argument, so she requires a program that will determine how many decodings there can be for a given string using her code.

Input

Input will consist of multiple input sets. Each set will consist of a single line of digits representing a valid encryption (for example, no line will begin with a 0). There will be no spaces between the digits. An input line of `0' will terminate the input and should not be processed

Output

For each input set, output the number of possible decodings for the input string. All answers will be within the range of a long variable.

Sample Input

25114
1111111111
3333333333
0

Sample Output

6
89
1 比较简单的动态规划,值得注意的是qq[i] == '0'的情况(我一开始也没有注意到,WA了几遍,给跪了)。
//很简单的动态规划
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string ss;
while(cin >> ss && ss != "0")
{
vector<long> qq;
int len = ss.length();
qq.resize(len+1);
int i;
qq[0] = 1;
qq[1] = 1;
for(i = 1;i < ss.size();i++)
{
if(ss[i] == '0')
qq[i+1] = qq[i-1];
else if((ss[i] >= '1' && ss[i] <= '9' && ss[i-1] == '1')||(ss[i] >= '1' && ss[i] <= '6' && ss[i-1] == '2'))
qq[i+1] = qq[i] + qq[i-1];
else
qq[i+1] = qq[i];
}
cout << qq[len] << endl;
}
return 0;
}
												

最新文章

  1. Android -- 简单的图片浏览器
  2. nginx+php部署
  3. net 数据库连接详解 相当经典啊
  4. 问题处理:找不到Pch预编译文件?
  5. javaScript-原型、继承-02
  6. 对比AppScan Source和Fortify扫描AltoroJ的结果
  7. Oracle利用存储过程性 实现分页
  8. Lua 基础 -- 学习笔记
  9. 头部banner根据网址高亮
  10. 简单理解PHP-FPM
  11. https://scrapingclub.com/exercise/detail_sign/
  12. 利用 Chrome 原生功能截图网页全图
  13. 图片的滑动缩放html、css、js代码
  14. PAT 1035 Password
  15. SQL-36 创建一个actor_name表,将actor表中的所有first_name以及last_name导入改表。
  16. Android Studio打开React Native创建的项目
  17. ajax完整请求
  18. sprint3(第一天)
  19. C++ 11 auto关键字
  20. 【Semantic segmentation Overview】一文概览主要语义分割网络(转)

热门文章

  1. MaxAlertView 强大的弹框试图
  2. “四则运算生成程序——GUI支持和部分功能改进”链接
  3. JMeter性能测试基础 (2) - 变量的使用
  4. 11git更改提交
  5. 一键轻松查看apk包名和Main Activity
  6. ACM数论之旅2---快速幂,快速求a^b((ノ`Д&#180;)ノ做人就要坚持不懈)
  7. mysql实现消息队列
  8. mybatis的setting
  9. ansible操作(一)
  10. BZOJ1064 NOI2008假面舞会(dfs树)