zoukankan      html  css  js  c++  java
  • [POJ 1850] Code

    Code
    Time Limit: 1000MS   Memory Limit: 30000K
    Total Submissions: 8539   Accepted: 4048

    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、简单、不过写了好久,囧
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    #define ll long long
    #define N 110
    
    char s[N];
    ll bit[N];
    ll dp[N][N];
    
    ll dfs(ll pos,ll mx,bool limit,bool fzero)
    {
        if(pos==-1) return 1;
        if(!limit && !fzero && dp[pos][mx]!=-1) return dp[pos][mx];
        ll end=limit?bit[pos]:26;
        ll ans=0;
        for(ll i=fzero?0:mx; i<=end; i++)
        {
            ans+=dfs(pos-1,i+1,limit && i==end,fzero && !i);
        }
        if(!limit && !fzero) dp[pos][mx]=ans;
        return ans;
    }
    ll cal()
    {
        ll len=strlen(s+1);
        for(ll i=1; i<=len; i++)
        {
            bit[len-i]=s[i]-'a'+1;
        }
        return dfs(len-1,0,1,1);
    }
    int main()
    {
        memset(dp,-1,sizeof(dp));
        while(scanf("%s",s+1)!=EOF)
        {
            int flag=1;
            int len=strlen(s+1);
            for(int i=1; i<len; i++)
            {
                if(!(s[i]<s[i+1]))
                {
                    flag=0;
                    break;
                }
            }
            if(!flag) printf("0
    ");
            else
                printf("%lld
    ",cal()-1);
        }
        return 0;
    }
    趁着还有梦想、将AC进行到底~~~by 452181625
  • 相关阅读:
    图片剪纸刀:批量切割图片工具
    Photosynth软件试用(将照片拼接成实景)
    制作一份简单的网络地图(世博地图的配准和切割)
    Discuz论坛地图插件(通过自定义Discuz Code实现)
    Maven Settings.xml 配置模板
    CentOS 7 firewalld 配置详解 (转)
    Silverlight学习笔记八右键菜单控件
    Silverlight学习笔记十三关于SilverLight的打印
    Silverlight学习笔记十二动态加载图片和显示提示(ToolTip)
    Silverlight学习笔记十一动态创建TabContro的TabItem
  • 原文地址:https://www.cnblogs.com/hate13/p/4452047.html
Copyright © 2011-2022 走看看