编码问题 题解
来源:互联网 发布:西安高新广电网络 编辑:程序博客网 时间:2024/06/06 13:20
【问题描述】
编码工作常被运用于密文或压缩传输。这里我们用一种最简单的编码方式进行编码:把一些有规律的单词编成数字。字母表中共有26个小写字母{a,b,c….,z}。这些特殊的单词长度不超过6且字母按照升序排列。把所有这样的单词放在一起,按字典顺序排列,一个单词的编码就对应着它在字典中的位置,例如:a-1;b-2;z-26;ab-27;ac-28;你的任务就是对于所给的单词,求出它的编码。
【样例输入】
ab
【样例输出】
27
【解题思路】
设给定的字母长度为l,不难看出可以用组合数公式求出长度为l的第一个单词的编码,即Σ(C(26,i),1<=i<=l-1)+1,接着用搜索一个个去搜长度为l的编码,直到输入的单词为止。
【代码实现】
编码
var s:string; ans,i,l:longint; flag:boolean;function c(x,y:longint):longint;var t,i:longint;begin c:=1; for i:=1 to y do c:=c*(x-i+1)div i;end;procedure dfs(n:longint;st:string);var j:longint; i,ch:char;begin if n=l then begin inc(ans); if st=s then begin flag:=true; exit; end; end; if n=0 then ch:='a' else ch:=succ(st[n]); for i:=ch to 'z' do begin dfs(n+1,st+i); if flag then exit; end;end;begin readln(s); l:=length(s); for i:=1 to l-1 do ans:=ans+c(26,i); dfs(0,''); writeln(ans);end.
请注意求组合数公式的方法!普通组合数公式会超范围,因此,这里用了自定义C函数,不理解的可以手推一下。(本人推了好久终于在老师的帮助下弄懂了……)。
【参考文献】
http://www.cnblogs.com/whitecloth/articles/2400584.html
0 0
- 编码问题 题解
- 约瑟夫问题题解
- Codevs3162抄书问题题解
- 棋盘覆盖问题 题解
- 区间覆盖问题 题解
- 删数问题题解
- 蓝桥杯Anagrams问题题解
- 背包问题题解
- 核电站问题he题解
- 编码问题
- 编码问题
- 编码问题
- 编码问题
- 编码问题
- 编码问题
- 编码问题
- 编码问题
- 编码问题
- POJ 3069 Saruman's Army
- 自定义数据库中使用 contentObserver
- OJ解题总结
- 2016年1月2日,参加第三个项目(6745小时)
- 常规功能和模块自定义系统 (cfcmms)—030开发日志(创建ManyToMany的column5)
- 编码问题 题解
- 字符串的比较
- 最小伤害 题解
- 全排列 (codevs 1294)题解
- 乌龟棋 (codevs 1068)题解
- 2016.01.08-2016.01.09回顾
- 一元三次方程 (codevs 1038)题解
- 计算系数 (codevs 1137) 题解
- 奇怪的函数 (codevs 3538/1696) 题解