【USACO编程竞赛题】密码算术(Cryptarithms)

下面是密码算术最著名的一道密码加法题 - SEND MORE MONEY 的每个字母都代表一个数字,相同字母代表相同数字,不同字母代表不同数字,所有数字需要满足加法运算的结果。 下面的图例演示了逻辑推理过程,大家看看是否可以理解为什么第一个破译的数字是1,第二个是0,…..,以此类推直到最后一个数字。 第一步:字母 M 替换为 1 第二步:字母 O 替换为 0 第三步:字母 S 替换为 9 第四步:字母 R 替换为 8 第五步:字母 E 替换为 5, 字母 D 替换为…

【USACO编程竞赛练习题】断开的项链

一个项链由红蓝白三色珠子随机组成,珠子总数大于3小于350。找出一个分割点,从该点往前单色珠子数量加上往后的单色珠子数量为最大,白色珠子可以当作红蓝任意一个颜色处理。 给定一个字符串代表珠子的组成,其中字母 w 代表白色珠子,字母 b 代表蓝色珠子,字母 r 代表红色珠子。 输入样例: "wwwbbrwrbrbrrbrbrwrwwrbwrwrrb" 输出样例: 11 上面的输入样例可以用下图来表示,从图中黄色短线处分割,前后有六个蓝色珠子和加五个红色珠子,总共11个珠子为最大值。 【算法思路】 方法一:暴力破解我们可以采取暴力破解的方法,循环项链的每一个珠子,检查当前位置前后单色珠子的数量之和,这样就可以找出最大值。注意输入样例是一个字符串,所以我们需要重复检查字符串开始和结束的位置以模拟完整项链的情形。时间复杂度:O(n2)方法二:DP 动态规划将两个相同的输入字符串连接在一起,这样就可以将环形搜索改成线性搜索。然后检查每一个断点的前后单色珠子数量。时间复杂度:O(n) 下面的动图展示了搜索的过程。

初级编程通关练习题 #19 – 判断三角形

给定三个数字作为边长,判断它们是否可以组成三角形。三条线段组成三角形的条件是:任何两条边之和大于第三条边。请实现一个函数 triangle,三个参数是a、b、c,判断a/b/c是否可以组成一个三角形,返回结果为True或者False,要求Python代码长度不能超过40个字符。 输入样例: a = 4b = 3c = 5 输出样例: True 算法思路: 对于限制代码长度的题目,我们需要使用匿名函数来减少字符, 因为lambda函数不需要写关键词return。譬如:triangle=lambda a,b,c:#your code goes here....a, b, c 三边组成三角形的条件是:a + b > c, a + c >…

中级编程通关练习题 #11 – 数列中值

给定两个已经从小到大排好序的整数数列 A 和 B,长度分别为 a 和 b。在时间复杂度为 O (log (a+b)) 的前提下,找出两个数列的中间值。也就是两个数列各自都只能遍历一次,找出它们的中值。所谓中值是指位置在两个数列中间的数值,如果 a+b的长度是9,那么中值就是两个数列合并后第五位置的数值,如果a+b的长度是10,那么中值就是第五和第六两个位置之和的一半。 输入样例: A = [3, 5, 7, 9, 11] B = [4, 6, 8, 10, 12] 输出样例: 7.5 在上面的输入样例中,两个数列合并后的数列是:[3,…