POJ 1850, Code

Time Limit: 1000MS  Memory Limit: 30000K
Total Submissions: 3153  Accepted: 1414


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


//  POJ1850.cpp : Defines the entry point for the console application.
//

#include 
< iostream >
using   namespace  std;

static   int  C[ 30 ][ 30 ];
int  main( int  argc,  char *  argv[])
{

    
char  word[ 15 ];
    scanf(
" %s " , word);
    
int  len  =  strlen(word);

    
for  ( int  i  =   1 ; i  <  len;  ++ i)
        
if  (word[i - 1 >=  word[i])
        {
            cout 
<<   0   <<  endl;
            
return   0 ;
        };

    C[
0 ][ 0 =   1 ;
    
for  ( int  i  =   1 ; i  <   30 ++ i)
        
for  ( int  j  =   0 ; j  <=  i;  ++ j)
            C[i][j] 
=  (j  ==   0 ?  C[i - 1 ][j] : C[i - 1 ][j - 1 +  C[i - 1 ][j];

    unsigned 
long   long  code  =   0 ;

    
for  ( int  i  =   1 ; i  <  len;  ++ i) code  +=  C[ 26 ][i];

    
for  ( int  i  =   0 ; i  <  len;  ++ i)
    {
        
char  c  =  (i == 0 ?   ' a ' : word[i - 1 +   1 ;
        
for (; c  <=  word[i]  -   1 ++ c)
            code 
+=  C[ ' z '   -  c][len  -   1   -  i];
    }

    
++ code;
    cout 
<<  code  << endl;

    
return   0 ;
}

转载于:https://www.cnblogs.com/asuran/archive/2009/10/16/1584249.html

猜你喜欢

转载自blog.csdn.net/weixin_34162228/article/details/94139808