zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    HDU2201
    HDU2202 凸包
    HDU 4353 几何
    POJ2031 prim
    HDU1392 凸包
    HDU1689 BFS+最小奇数环
    设计模式 [转]
    Mining Massive Data Sets PPT
    C++编程命名规范 [转]
    static_cast与dynamic_cast转换 [转]
  • 原文地址:https://www.cnblogs.com/asuran/p/1584249.html
Copyright © 2011-2022 走看看