[POJ 1850] Code
Code
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 8566 | Accepted: 4069 |
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.
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
区间计数
前面发了一个用数位DP解的题解,详见http://www.cnblogs.com/hate13/p/4452047.html
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define ll long long #define N 100010 ll c[27][27]; void Init() { memset(c,0,sizeof(c)); c[0][0]=1; for(int i=1;i<=26;i++) { c[i][0]=1; for(int j=1;j<=i;j++) { c[i][j]=c[i-1][j-1]+c[i-1][j]; } } } int main() { Init(); char s[12]; int len,flag; while(scanf("%s",s+1)!=EOF) { flag=1; len=strlen(s+1); for(int i=1;i<=len;i++) { if(s[i-1]>=s[i]) { flag=0; break; } } if(!flag) { printf("0\n"); continue; } ll ans=0; for(int i=1;i<len;i++) ans+=c[26][i]; for(int i=1;i<=len;i++) { char t=(i==1)?'a':s[i-1]+1; while(t<s[i]) { ans+=c['z'-t][len-i]; t++; } } printf("%lld\n",ans+1); } return 0; }
趁着还有梦想、将AC进行到底~~~by 452181625