上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 31 下一页
摘要: 题目描述:输入一个N(N#include #include using namespace std; vector matrix[12]; void dfs(int i, int n) { if(i == n-1) return; int maxVal = matrix[i][i], maxLine = i; for(int j = i+1; j < n; j++) { if(maxVal < matrix[j][i]) { maxVal = matrix[j][i]; maxLine = j; ... 阅读全文
posted @ 2014-03-02 21:37 SangS 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 题目给定一个有向图, 判断其是否是一棵树要求 (1) 除了根节点外, 每个节点只有唯一的前驱 (2) 从根节点出发, 到任何节点有且只有一条路径思路1. 要求(1) 可以通过记录每个节点的前驱决定, (2) 可以从根节点 dfs, 搜不到的点不是树, 搜到的点在(1)符合条件的情况下, 只有一条路径2. 具体实现的话可以用 map[node*, node*]3. 最终使用的并查集, 使用并查集的过程要注意几个判断条件3.1 (1, 2) (2, 1) 不是树, 判断条件是 if(ed == find(st)) 假如经过寻找, 一个节点的父亲还是他自己, 说明出现了环3.2 一个节点不能被... 阅读全文
posted @ 2014-03-02 11:57 SangS 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 题目描述:给定平面上的n个点,任意做一条直线,求至多能有几个点恰好落在直线上。思路1. Leetcode 上原题. 解法是先确定一个点, 然后计算其他点相对于这个点的斜率2. 这道题需要注意多点重合, 斜率为无穷大的情况代码 未通过九度测试#include #include #include using namespace std;int xs[200], ys[200];int main() {freopen("testcase.txt", "r", stdin); int pointnum, x, y; while(scanf("%d&qu 阅读全文
posted @ 2014-03-02 11:50 SangS 阅读(330) 评论(1) 推荐(0) 编辑
摘要: 题目描述:给定一个初始为空的栈,和n个操作组成的操作序列,每个操作只可能是出栈或者入栈。要求在操作序列的执行过程中不会出现非法的操作,即不会在空栈时执行出栈操作,同时保证当操作序列完成后,栈恰好为一个空栈。求符合条件的操作序列种类。例如,4个操作组成的操作序列符合条件的如下:入栈,出栈,入栈,出栈入栈,入栈,出栈,出栈共2种。思路1. Leetcode 上有道类似的题目, 那道题求得是括号的总类, 当初用的是搜索法2. 搜索法超时, 分治法没想起什么好办法, 动规没头绪3. dp[i][j] (i>=j) 表示入栈 i 次出栈 j 次 的种类数4. dp[i][j] = dp[i-1][ 阅读全文
posted @ 2014-03-02 11:46 SangS 阅读(453) 评论(0) 推荐(0) 编辑
摘要: 题目根据手机按键上的对应关系将字母转成数字, 简单模拟题总结1. scanf("%s", input); 不需要加上 &2. 字符串的终结符是 '\0'3. scanf 和 printf 打印的都是 char*, 不能是 int*代码#include #include #include using namespace std;int map[50];void init() { for(int i = 0; i < 18; i ++) { map[i] = i/3 + 2; } map[18] = 7; for(int i = 19; i < 阅读全文
posted @ 2014-03-02 11:44 SangS 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 题目给定一个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/ 阅读全文
posted @ 2014-03-01 21:53 SangS 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 题目已知一个无向带权图,求最小整数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)... 阅读全文
posted @ 2014-03-01 21:41 SangS 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 题目给定一个数字序列,查询任意给定区间内数字的最小值。思路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, ... 阅读全文
posted @ 2014-03-01 21:39 SangS 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 题目给定这么一个二叉树, 求解 (1) 对于给定正整数 n, 求解其值, 比如当 n = 5 时, 返回 p = 3, q = 2 (2) 对于给定的 p,q 返回其序号 n思路1. 最初以为这是道数学题, 但当画出第四层叶子节点时, 发现即便这是道数学问题, 也可以用递归求解. 同时因为此题属于完全二叉树, 所以使用递归效率也不会太差, 毕竟每次递归数据规模都可以减少一半2. 已知 n 或已知 p,q 都属于某一个叶子节点, 因此我们需要从底向上推导, 属于 bottomUp 算法. 我曾总结过 bottomUp 算法, 那次的结论是使用后序遍历即可, 但这是一道逻辑上的树, 不能进行后续遍 阅读全文
posted @ 2014-03-01 21:33 SangS 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 考虑你正在为游戏人物设计一个继承体系, 人物有一个函数叫做 healthValue, 他会返回一个整数, 表示人物的健康程度. 由于不同的人物拥有不同的方式计算他们的健康指数, 将 healthValue 声明成一个 virtual 似乎是再合适不过的了class GameCharacter {public: virtual int healthValue() const; ...};那么, 它还有没有其他的实现形式呢?1. 藉由 Non-Virtual Interface 手法实现 Template Method 模式class GameCharacter {public: ... 阅读全文
posted @ 2014-03-01 15:05 SangS 阅读(203) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 31 下一页