摘要:
题目给定一个n*m的迷宫,如S....#E.E其中,S代表开始位置,#代表不可行走的墙,E代表出口。主人公从开始位置出发,每次等概率的随机选择下一个可以行走的位置(可能会发生回溯),直到到达某一个出口为止。现在他想知道,在这一概率事件中,它从开始位置走到某一个出口的期望步数是多少。思路1. 期望 E = p1 * step1 + p2 * step2 +... pn * stepn2. 因为可能会发生回溯, 因此直接使用 dfs 并不靠谱3. 那么考虑 dp[i][j], dp[i][j] 表示到达终点的期望, 是否可行呢? 在题目描述给出的例子中, dp[2][1] = 1/3*1 + 1/ 阅读全文
摘要:
题目已知一个无向带权图,求最小整数k。使仅使用权值小于等于k的边,节点1可以与节点n连通思路1. 这应该是最短路径的变形题目2. 把经典 dijkstra 的距离计算公式稍微变形一下就好了3. 这道题 BFS 应该也可以做4. 下面的代码超时了, 最后一个案例没能算出来, 我尝试把 Edge 都换成 Edge*, 没想到更慢...代码 未通过 九度 测试#include #include #include #include using namespace std;class Edge {public: Edge(int _ed, int _wt):ed(_ed), weight(_wt)... 阅读全文
摘要:
题目给定一个数字序列,查询任意给定区间内数字的最小值。思路1. 第一反应, 这是在考察线段树, 链接里的 blog 讲的很不错, 清晰易懂2. 这道题不需要考虑插入或者删除线段, 只需要 build 和 统计3. 建树的话, 先考虑 node 节点的设计, 题目要求的是区间最小值, 所以自然需要一个域保留当前 node 节点表示区间的最小值.class Node {public: int left, right; Node *lchild, *rchild; int minVal;};4. 然后进行递归建树. 区间 [a,b]的最小值是由 [a,mid] 和 [mid+1, ... 阅读全文
摘要:
题目给定这么一个二叉树, 求解 (1) 对于给定正整数 n, 求解其值, 比如当 n = 5 时, 返回 p = 3, q = 2 (2) 对于给定的 p,q 返回其序号 n思路1. 最初以为这是道数学题, 但当画出第四层叶子节点时, 发现即便这是道数学问题, 也可以用递归求解. 同时因为此题属于完全二叉树, 所以使用递归效率也不会太差, 毕竟每次递归数据规模都可以减少一半2. 已知 n 或已知 p,q 都属于某一个叶子节点, 因此我们需要从底向上推导, 属于 bottomUp 算法. 我曾总结过 bottomUp 算法, 那次的结论是使用后序遍历即可, 但这是一道逻辑上的树, 不能进行后续遍 阅读全文
摘要:
考虑你正在为游戏人物设计一个继承体系, 人物有一个函数叫做 healthValue, 他会返回一个整数, 表示人物的健康程度. 由于不同的人物拥有不同的方式计算他们的健康指数, 将 healthValue 声明成一个 virtual 似乎是再合适不过的了class GameCharacter {public: virtual int healthValue() const; ...};那么, 它还有没有其他的实现形式呢?1. 藉由 Non-Virtual Interface 手法实现 Template Method 模式class GameCharacter {public: ... 阅读全文
摘要:
1. 成员函数的接口总是被继承. 如 Item32 所说, public 意味着 is-a, 所以对 base class 为真的任何事情对 derived class 也为真2. 声明一个 pure virtual 函数的目的是为了让 derived class 只继承其接口 但令人意外的是, 我们竟然可以为 pure virtual 函数提供定义. 这有另一种用处, 即作为 default 实现3. 声明 impure virtual 函数的目的是为了让 derived class 继承接口和默认实现这里会出现一个特殊情况, 如果有些子类(多数子类)欢迎默认实现而少数子类却不欢迎呢? 一. 阅读全文
摘要:
class Base {private: int x;public: virtual void mf1() = 0; virtual void mf2(); void mf3(); ...};class Derived: public Base {public: virtual void mf1(); void mf4(); ...};上面代码构成了一个 namespace在 derived class 内的 mf4 代码实现为void Derived::mf4() { ... mf2(); ...}编译器看到 mf2 后现在 ... 阅读全文