Language:
Code
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.
Sample Input bf Sample Output 55 Source
Romania OI 2002
题意很简单,不过自己递推了好久都没推出来。看了别人的题解,有的是DFS有的是DP,不过觉得正确的姿势是组合计数吧。 根据串的长度分别计数: len num 1 C(26,1) 2 C(26,2) 3 C(26,3) ... 利用杨辉三角求出组合表C[][] 接下来就是统计了 第一步:统计比当前串长度小的个数 第二步: 统计长度等于当前串且比当前串小的串的个数 第三步:sum值加一,加上当前串。 代码:
#include<stdio.h>
#include<string.h> char s[10]; int c[30][30]; int main() { for(int i=0;i<=26;i++) { for(int j=0;j<=i;j++) { if(!j||j==i) c[i][j]=1; else c[i][j]=c[i-1][j]+c[i-1][j-1]; } } c[0][0]=0; while(~scanf("%s",s)) { int len=strlen(s); int sum=0; int ok=1; for(int i=1;i<len;i++) { if(s[i-1]>=s[i]) { ok=0; printf("0\n"); break; } } if(ok) { sum=0; for(int i=1;i<len;i++) sum+=c[26][i]; //printf("%d ",sum); for(int i=0;i<len;i++) { char tmp; if(!i) tmp='a'; else tmp=s[i-1]+1; while(tmp<=s[i]-1) { sum+=c['z'-tmp][len-i-1]; tmp++; } } printf("%d\n",sum+1); } } return 0; } |
poj 1850 Code(同 poj 1496 Word Index)
最新推荐文章于 2019-10-16 22:12:00 发布