zoukankan      html  css  js  c++  java
  • Code(组合数学)

    Code
    Time Limit: 1000MS Memory Limit: 30000K
    Total Submissions: 8766 Accepted: 4168

    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
    大神博客

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <queue>
    #include <map>
    #include <algorithm>
    #define INF 0x3f3f3f3f
    using namespace std;
    
    typedef long long LL;
    
    const int MAX = 1e5+10;
    
    int Bin[35];
    
    int c[33][33];
    
    char str[20];
    
    char ch;
    
    void ComBinnations()//打表,计算组合数
    {
        for(int i=0; i<=32; i++)
        {
            for(int j=0; j<=i; j++)
            {
                if(!j||i==j)
                {
                    c[i][j]=1;
                }
                else
                {
                    c[i][j]=c[i-1][j]+c[i-1][j-1];
                }
            }
        }
        c[0][0]=0;
    }
    int main()
    {
        int sum;
        bool flag;
        ComBinnations();
        scanf("%s",str);
        int len=strlen(str);
        flag=false;
        for(int i=1; i<len; i++)//判断是否是合法字符
        {
            if(str[i-1]>=str[i])
            {
                printf("0
    ");
                flag=true;
                break;
            }
        }
        if(!flag)
        {
            sum=0;
            for(int i=1; i<len; i++)//计算比它小的字母排列
            {
                sum+=c[26][i];
            }
            for(int i=0; i<len; i++)//计算长度相等是字符的个数
            {
                ch=!i?'a':str[i-1]+1;
                while(ch<str[i])
                {
                    sum+=c['z'-ch][len-i-1];
                    ch++;
                }
            }
            printf("%d
    ",sum+1);//加上本身
        }
        return 0;
    }
    
  • 相关阅读:
    mvc4 to mvc5 orEF5 to EF6 ,(升级EF6)
    mongodb 增删改查
    切换frame
    selenium使用,xpath解析模块,笔记整理在最后# 四套解析数据的方式 # 1.bs4 2.css_selector 3.xpath 4.re,
    爬虫,request,response 属性,方法,2.beautifulsoup解析模块
    爬虫基础知识简单案例
    vue跳转,v-model 双向绑定,-vuex的使用cookie:,视频第三方播放
    分页器,解析器,url控制器,响应器
    正向代理与反向代理
    认证权限频率自定义
  • 原文地址:https://www.cnblogs.com/juechen/p/5255963.html
Copyright © 2011-2022 走看看