zoukankan      html  css  js  c++  java
  • POJ 1496 POJ 1850 组合计数

    Code
    Time Limit: 1000MS Memory Limit: 30000K
    Total Submissions: 8256 Accepted: 3906

    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


    /**************************************
         author     :  Grant Yuan
         time        :  2014/10/12 17:06
         algortihm: 组合计数
         source     : POJ 1496 POJ 1850
    ***************************************/
    
    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    using namespace std;
    char a[27];
    int num[27][27];
    long long ans;
    bool check()
    {
        int l=strlen(a);
        if(l==1) return 1;
        for(int i=0;i<l-1;i++)
            if(a[i]>=a[i+1]) return 1;
        return 0;
    }
    void Get_num()
    {
        int l=strlen(a);
        for(int i=0;i<=26;i++)
            for(int j=0;j<=i;j++)
        {
            num[i][j]=0;
            if(i==0||j==0) num[i][j]=1;
            else num[i][j]=num[i-1][j]+num[i-1][j-1];
        }
    }
    void  Get_sum1()
    {
        int l=strlen(a);
        ans=0;
        for(int i=0;i<l;i++)
            ans+=num[26][i];
    }
    void Get_sum2()
    {
        int l=strlen(a);
       for(int i=0;i<l;i++)
       {
           char j;
           if(i==0) j='a';
           else j=a[i-1]+1;
           for(;j<a[i];j++)
           {
               ans+=num['z'-j][l-i-1];
           }
       }
    }
    int main()
    {
        Get_num();
        while(~scanf("%s",a)){
            int l;
            l=strlen(a);
            if(l==1) {printf("%d
    ",a[0]-'a'+1);continue;}
            if(check()) {printf("0
    ");continue;}
            Get_sum1();
            Get_sum2();
            printf("%lld
    ",ans);
        }
        return 0;
    }
    
    

  • 相关阅读:
    ORA-01207: file is more recent than control file
    ORA-08189
    oracle 修改表空间存储路径
    oracle 日志文件管理
    Oracle ClusterwarePRCT-1011 : Failed to run "oifcfg".&nb
    linux:文件打包与压缩
    linux:查找搜索文件
    Python:lambda表达式(匿名函数)
    网络协议各层概述
    linux:用户及文件权限管理
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6940047.html
Copyright © 2011-2022 走看看