分析:先考虑一个例子:
x=babgbag z=bag
答案是5,如何数数?
假设函数times(x, z)返回z在x中的次数(z可以是字符串也可以是字符——后者相当容易处理),容易得到递归解(伪代码):more
cpp
times(x, z) {
if z.size == 1
return times(x, z[0]) //寻找字符z[0]在串x中出现的次数
s = 0
for i = 0; i < x.size; i++
if x[i] == z[0]
//s[i, j]表示s从索引i开始到j结束(包括j在内)的子串,索引-1的位置指向串的最后一个字符
s += tim
继续阅读 »
分析:用什么样的数据结构来表示投票有很多选择;如果选择了合适的数据结构,不但可以提高时间效率还可以简化编程。more
```cpp
include
include
include
include
include
include
继续阅读 »
分析:如果把一个作者看作一个顶点,若两个作者合作发表过一篇论文则对应的两点有一条边相连,那么一个作者的Erdos数就是该点到Erdos点的最短距离。在此图中从Erdos点开始宽度优先遍历即可得解。不过,此题真正困难之处并不在此,more而在于如何处理输入!因为题目对于输入格式的说明含混不清,仅举了个例子,且例子也没包括一些特殊情况,所以大家就只能猜了!读者可以参考UVa BBS上的
继续阅读 »
分析:先来看一个简单情况,当只有两个订单o1(t1, s1)和o2(t2, s2)时,罚金最小的处理顺序应该是怎样的:
先o1再o2,罚金为t1 * s2
先o2再o1,罚金为t2 * s1
比较t1 * s2与t2 * s1的值,选取较小值对应的顺序。more
继续阅读 »
分析:按从上到下、从左到右的顺序对矩阵中每一个字符向八个方向查找是否存在一个以它开头的单词。more
```cpp
include
include
include
include
include
继续阅读 »