POJ1850

问题重述:

用26个小写字母进行编码,编码规则如下:

1)每个编码中前一个字母必须小于后一个字母

2)编码按照长度从小到大排列,相同长度按字典序进行排列

输入一个字母串,求解该编码对应的数值。

问题分析:

该问题等价于求解小于输入编码的编码的数目。

对于编码X = x1,x2,x3,...xk, 小于X的编码可以分为两个部分

1)位数小于k的编码。

  这部分编码的数目 = C[26][1] + C[26][1] + ... + C[26][k - 1]

2)长度为k,且小于X的编码。

  假设Y为满足该条件的编码,现只需确定Y的数目。从左到右遍历编码X: i = 1 to k,假设X和Y的前i - 1位均相等且 yi != xi,那么 yi 必须满足 xi-1 = yi - 1 < yi < xi。

  对于yi的每一种取值, yi, yi + 1, ... yk只需满足递增关系即可, 共有C[26][25 - (yi - 'a')]种编码。

根据以上分析,即可求出结果。

AC代码:

 //Memory: 204K        Time: 0MS
 #include <iostream>
 #include <cstdio>
 #include <cstring>
 #include <string>
 #include <algorithm>

 using namespace std;

 string s, ss;
 ][];

 void init()
 {
     ; i <= ; i++)
         c[i][] = c[i][i] = ;

     ; i <= ; i++)
         ; j < i; j++)
             c[i][j] = c[i - ][j] + c[i - ][j - ];
 }

 int main()
 {
     cin >> s;

     int len = s.size();
     ; i < len - ; i++) {
         ] || s[i] == s[i + ]){
             cout <<  << endl;
             ;
         }
     }

     init();
     ;
     ; i <= len - ; i++) {
         ans += c[][i];
     }

     ; i < s[] - 'a'; i++) {
         ans += c[ - i][len - ];
     }

     ; i < len; i++) {
         ] - ; j < s[i] - 'a'; j++)
             ans += c[ - j][len - - i];
     }
     cout << ans +  << endl;

     ;
 }

POJ1850 组合数学的更多相关文章

  1. POJ1850——Code(组合数学)

    Code DescriptionTransmitting and memorizing information is a task that requires different coding sys ...

  2. poj1496 Word Index / poj1850 Code(组合数学)

    poj1850 Code 题意:输出若干个给定的字符串($length<=10$)在字典序中的位置,字符串中的字母必须严格递增. 读取到非法字符串时,输出“0”,终止程序.(poj1496:继续 ...

  3. poj1850 Code【组合数学】By cellur925

    题意: * 按照字典序的顺序从小写字母 a 开始按顺序给出序列 (序列中都为升序字符串)* a - 1* b - 2* ...* z - 26* ab - 27* ...* az - 51* bc - ...

  4. poj 3734 Blocks 快速幂+费马小定理+组合数学

    题目链接 题意:有一排砖,可以染红蓝绿黄四种不同的颜色,要求红和绿两种颜色砖的个数都是偶数,问一共有多少种方案,结果对10007取余. 题解:刚看这道题第一感觉是组合数学,正向推了一会还没等推出来队友 ...

  5. 组合数学or not ---- n选k有重

    模板问题: 1. 取物品 (comb.pas/c/cpp) [问题描述] 现在有n个物品(有可能相同),请您编程计算从中取k个有多少种不同的取法.[输入] 输入文件有两行,第一行包含两个整数n,k(2 ...

  6. 组合数学(全排列)+DFS CSU 1563 Lexicography

    题目传送门 /* 题意:求第K个全排列 组合数学:首先,使用next_permutation 函数会超时,思路应该转变, 摘抄网上的解法如下: 假设第一位是a,不论a是什么数,axxxxxxxx一共有 ...

  7. uestc1888 Birthday Party    组合数学,乘法原理

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=25539#problem/G 题目意思: 有n个人,每个人有一个礼物,每个人能拿 ...

  8. UVA 11076 Add Again 计算对答案的贡献+组合数学

    A pair of numbers has a unique LCM but a single number can be the LCM of more than one possiblepairs ...

  9. POJ3252——Round Number(组合数学)

    Round Numbers DescriptionThe cows, as you know, have no fingers or thumbs and thus are unable to pla ...

随机推荐

  1. 一次awk脚本的重构

    # 脚本功能说明: # . 检查URL中的域名是否是指定版本的域名 # . 对访问bid,authorid的游客身份排重,并累加其pv # 全局变量说明 # DOMIAN_LIST 是数组,key是要 ...

  2. Linux查看机器是多少位

    命令: file /bin/ls或者file /sbin/init 示例: 如上所示,我的机器是32位的.

  3. Moxon(摩克森)天线介绍

    一.Moxon(摩克森)天线介绍Moxon天线是一种方形天线,性质上类似二单元Yagi(八木),增益高,具有很强的方向性,按尺寸做好后几乎不用调试,阻抗50欧姆.在U段,天线尺寸小,便于携带,是一款非 ...

  4. COJ 0999 WZJ的数据结构(负一)

    WZJ的数据结构(负一) 难度级别:D: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 输入N个模板串Pi和文本串T,输出每个模板串Pi在T ...

  5. 如何从google play下载app应用,直接下载apk

    如何从google play直接下载apk   by fly2004jun 2013-10-05 转载请附出处     由于某些原因,大天朝局域网访问google很多服务不能用,其中就包括google ...

  6. 简单CSS定位瀑布流实现方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. javascript算法挑战

    1.翻转字符串算法挑战: 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串. 你的结果必须得是一个字符串 function reverseString(str) ...

  8. jq指定行切换

    function G(){ var item=$('.req_list_item>li'); item.find($('.req_show')).hover(function(){ $(this ...

  9. IT江湖

    我喜欢看武侠电影,尤其的70-80年代的邵氏电影,在这个期间,邵氏公司将金庸和古老很多小说都改拍成了电影,可以说,看这些电影是一种享受,真的! 对于现实中的IT世界,也像是一个江湖,当你掌握了一些技能 ...

  10. java Date获取 年月日时分秒

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...