Sicily 1001
2016-05-08 16:15
357 查看
1001. Alphacode
Constraints
Time Limit: 1 secs, Memory Limit: 32 MBDescription
Alice and Bob need to send secret messages to each other and are discussing ways to encode theirmessages: 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 astupid 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 willdetermine 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 avalid 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 inputand should not be processed
Output
For each input set, output the number of possible decodings for the input string. All answers will bewithin the range of a long variable.Sample Input
25114 1111111111 3333333333 0
Sample Output
6 89 1 题意解释一下。 给出一个数字数列,判断可以组合出多少种字母数列。
#include<iostream> #include<cstring> using namespace std; bool is_letter(char begin,char end) { if(begin>='3') return false; else if(begin=='2') { // cout<<"end"<<end<<endl; if(end<='6'); return true; return false; } else if(begin=='0') return false; else return true; } int main() { char num[10000]; long long n_way[10000]; while(cin>>num) { if(num[0]=='0') break; memset(n_way,0,sizeof(n_way)); n_way[0]=1; if(is_letter(num[0],num[1])==1&&num[1]!='0') n_way[1]=2; else { n_way[1]=1; } for(int i=2;i<strlen(num);i++) { if(num[i]=='0') n_way[i]=n_way[i-2]; else if(is_letter(num[i-1],num[i])==0) n_way[i]=n_way[i-1]; else n_way[i]=n_way[i-1]+n_way[i-2]; } /* for(int i=0;i<strlen(num);i++) { cout<<n_way[i]<<endl; }*/ cout<<n_way[strlen(num)-1]<<endl; } return 0; }
相关文章推荐
- Java---网络编程(2)-UDP
- java集合14--Map总结
- 从大数据到认知计算,未来需要更强的计算能力
- Util.FSUtils: Waiting for dfs to exit safe mode
- Java---网络编程(2)-UDP
- 游戏角色 1
- 守护进程
- IO.Util中的log(日志)
- Java之------socket系列(二)UDP
- jQuery-遍历
- 一篇关于apache commons类库的介绍
- 三角雏形 4
- Git 版本控制基本原理
- 最小生成树的Prime算法的思想
- POJ 1094 Sorting It All Out【拓扑排序】
- 提高篇项目1(3)——函数版星星
- Reported time is too far out of sync with master. Time difference of 52692ms > max allowed of 30000ms
- Mysql 存储程序
- 4月15日和27日作业总结,成绩
- 三角雏形 3