Code(POJ--1850
2015-08-25 16:37
253 查看
Description
Transmitting and memorizing information is a task that requires different coding systems for the best use of the available space. A well
known system is that one where a number is associated to a character sequence. It is considered that the words are made only of small characters of the English alphabet a,b,c, ..., z (26 characters). From all these words we consider only those whose letters
are in lexigraphical order (each character is smaller than the next character).
The coding system works like this:
• The words are arranged in the increasing order of their length.
• The words with the same length are arranged in lexicographical order (the order from the dictionary).
• We codify these words by their numbering, starting with a, as follows:
a - 1
b - 2
...
z - 26
ab - 27
...
az - 51
bc - 52
...
vwxyz - 83681
...
Specify for a given word if it can be codified according to this coding system. For the affirmative case specify its code.
Input
The only line contains a word. There are some constraints:
• The word is maximum 10 letters length
• The English alphabet has 26 characters.
Output
The output will contain the code of the given word, or 0 if the word can not be codified.
题意:给字符串按字典序进行编号,从1开始,而且合法的字符串是字母按严格的字典序升序组合的字符串。输入字符串输出该字符串的编号,如果是不合法的字符串则输出0。
借鉴:点击打开链接【能够更好的理解此题,该博主讲的更详细且好理解】
Sample Input
Sample Output
Transmitting and memorizing information is a task that requires different coding systems for the best use of the available space. A well
known system is that one where a number is associated to a character sequence. It is considered that the words are made only of small characters of the English alphabet a,b,c, ..., z (26 characters). From all these words we consider only those whose letters
are in lexigraphical order (each character is smaller than the next character).
The coding system works like this:
• The words are arranged in the increasing order of their length.
• The words with the same length are arranged in lexicographical order (the order from the dictionary).
• We codify these words by their numbering, starting with a, as follows:
a - 1
b - 2
...
z - 26
ab - 27
...
az - 51
bc - 52
...
vwxyz - 83681
...
Specify for a given word if it can be codified according to this coding system. For the affirmative case specify its code.
Input
The only line contains a word. There are some constraints:
• The word is maximum 10 letters length
• The English alphabet has 26 characters.
Output
The output will contain the code of the given word, or 0 if the word can not be codified.
题意:给字符串按字典序进行编号,从1开始,而且合法的字符串是字母按严格的字典序升序组合的字符串。输入字符串输出该字符串的编号,如果是不合法的字符串则输出0。
借鉴:点击打开链接【能够更好的理解此题,该博主讲的更详细且好理解】
Sample Input
bf
Sample Output
55
#include <cstdio> #include <cstring> using namespace std; int c[30][30]= {0}; void play_table() //打表,将组合数预处理出来 { for(int i=0; i<=30; i++) for(int j=0; j<=i; j++) if(!j||i==j) c[i][j]=1; else c[i][j]=c[i-1][j]+c[i-1][j-1]; return ; } int main() { char ss[15]; while(~scanf("%s",ss)) { int len=strlen(ss),flag=1; for(int i=1; i<len; i++) if(ss[i]<=ss[i-1]) { flag=0; break; } if(!flag) //如果是不合法字符串则直接输出0 { printf("0\n"); continue; } play_table(); int sum=0; for(int i=1; i<len; i++) //计算长度小于输入字符串长度的个数 sum+=c[26][i]; for(int i=0; i<len; i++) //计算长度等于输入字符串长度且字典序在输入字符串前边的字符串个数 { char t=i?ss[i-1]+1:'a'; //当前位置可以取的字母 while(t<=ss[i]-1) { sum+=c['z'-t][len-i-1]; //'z'-t表示字典序比t大且能放的字母个数,len-i-1表示当前位置后边还未放字母的位数个数 t++; } } printf("%d\n",sum+1); //sum累计的是当前字符串之前有多少个字符串,自身编号当然还要在加1 } return 0; }
相关文章推荐
- java 获取两个日期的相差天数
- DNS解析过程详解
- TWinControl的刷新过程(5个非虚函数,4个覆盖函数,1个消息函数,默认没有双缓冲,注意区分是TCustomControl还是Windows原生封装控件,执行流程不一样)
- JavaScript构造函数学习笔记
- Android meta-data(未完成)
- Android使用TextView实现无下划线超链接
- pjsip的simple_pjsua.c和simpleua.c分析
- 基本排序算法--堆排序
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
- 如何修改linux 的SSH的默认端口号
- 数据结构之红黑树——BST的变种
- Win7 64位 + LoadRunner 11录制时弹不出IE的解决办法
- iOS----时间日期处理
- iOS UIWebView 通过 cookie 完成自动登录验证
- android的DrawerLayout用法
- struts2之文件上传
- 【POJ 3615】Cow Hurdles
- Android meta-data(未完成)
- C#对Excel的操作
- LINUX 使用DBCA创建ORACLE数据库