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

    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
    ");
                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
    ",ans+1);
        }
        return 0;
    }
    趁着还有梦想、将AC进行到底~~~by 452181625
  • 相关阅读:
    一道《编程之美》第一章的无解题引发的“血案”
    MapReduce实例2(自定义compare、partition)& shuffle机制
    MapReduce实例&YARN框架
    HDFS下载数据机制的底层分析
    在windows下的hdfs客户端编写
    C语言-第2次作业得分
    第2次作业得分-东师软工
    第1次作业得分-东师软工
    第3次作业-四则运算(结对作业)
    第2次作业-效能分析
  • 原文地址:https://www.cnblogs.com/hate13/p/4471212.html
Copyright © 2011-2022 走看看