自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

靖空间

降低成功的时间复杂度,提高生活的空间复杂度

  • 博客(74)
  • 资源 (5)
  • 收藏
  • 关注

原创 HDU 4006 The kth great number AVL解法

给出动态更新数据,实时问第K个大的数值是什么?利用AVL数据结构做的一个统计数,比较高级的数据结构内容了。不知道题目给出的数据值是否有重复,因为我下面的程序是可以处理出现数据重复的情况的。其中的奥妙是增加了repeat的信息,可以知道出现了当前数组多少次。主要是知道如何维护这些数据和如何查询,维护数据的函数是pushUp,查询函数是selectKth。其他就是一般的AVL操作。

2014-07-31 21:30:05 972

原创 HDU 3068 最长回文 Manacher算法

Manacher算法是个解决Palindrome问题的O(n)算法,可以说是个超级算法了,秒杀其他一切Palindrome解决方案,包括复杂的后缀数组。网上很多解释,这里总结一下思想重点:1 原字符串的字符间插入新的字符, 如#,方便统一所有的字符中心,比如aa和aba的字符中心不一样的,aa的字符中心可以说是aa,而aba的中心则是b,而插入#之后,aa成#a#a#,其中

2014-07-31 00:15:29 1305

原创 HDU 2009 整除的尾数 题解

Problem Description一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢? Input输入数据有若干组,每组数据包含二个整数a,b(0 Output对应每组数据,将满足条件的所有尾数在一行内输出,格式见样本输出。同组数据的输出,其每个尾数之间空一格,行末没有空格。

2014-07-30 09:50:48 1307

原创 HDU 1718 Rank counting sort解法

本题是利用counting sort的思想去解题。注意本题,好像利用直接排序,然后查找rank是会直接被判WA的,奇怪的判断系统。因为分数值的范围是0到100,非常小,而student 号码又非常大,故此天然的需要利用counting sort的情况。#include #include const int MAX_N = 101;int arr[MAX_N];int

2014-07-30 08:40:10 1035

原创 HDU 2203 亲和串 KMP解法

本题就是找子字符是否出现。不过稍微问了个循环字符串,直接把原来的字符串复制多一倍就可以了。剩下的就是strstr函数的实现了。当然你要偷懒直接调用,strstr函数,或者使用string中的find函数都是可以过掉的。不过面试的时候就不能这么做了。这个时候使用KMP是很好的办法,听说微软面试,看到你用KMP也无可挑剔了,故此要学好这个算法。

2014-07-29 21:40:14 1020

原创 HDU 1160 FatMouse's Speed DP题解

本题就先排序老鼠的重量,然后查找老鼠的速度的最长递增子序列,不过因为需要按原来的标号输出,故此需要使用struct把三个信息打包起来。查找最长递增子序列使用动态规划法,基本的一维动态规划法了。记录路径:只需要记录后继标号,就可以逐个输出了。#include #include using namespace std;const int MAX_N = 1005;

2014-07-29 18:01:01 1051

原创 POJ 2418 Hardwood Species Trie解法

计算一个字符串数组中有多少个重复字符串出现。如果直接使用map容器,那么这条题就很简单了,一下就AC了,因为map已经处理好一切了;不过时间超过1532ms,有点慢。如下:int main(){ map msi; int total = 0; char treeName[40]; while (gets(treeName)) { msi[treeName]++;

2014-07-28 21:01:32 1123

原创 POJ 1026 Cipher 题解

看似简单的字符串处理,不过直接暴力法是会超时的。故此需要优化,这里使用周期优化。研究过数列序列的都知道,其实序列反复调用另外一个序列得到一个新的序列,都会出现周期的,问题是周期何时出现,如果利用这个周期。这就需要分开每个数,使用一个新的数列记录每个数的周期,利用这个周期截去一大段数据,那么剩下的数据就很好处理了。因为所有的周期数总和都不会超过n,数列的长度的,所以时

2014-07-28 16:20:05 1004

原创 POJ 1002 487-3279 Trie题解

本题的解法是多种多样的,这里使用Trie来解决一下。也可以使用hash表,map等解法,因为输入是特定的7位数字,故此应该都可以解决的。这里使用Trie的速度并不快,主要是因为最后我直接遍历输出,遍历整个Trie的速度还是比较慢的。思路:1 使用insert函数建立Trie,主要增加一个叶子节点的信息,记录当前有多少个重复的字符串2 遍历就是根据叶子节点的信息决定是否需要输出。

2014-07-28 13:23:58 1005

原创 Design Pattern Bridge 桥设计模式

桥设计模式其实就是一个简单的has a relationship,就是一个类拥有另一个类,并使用另一个类实现需要的功能。比如遥控器和电视之间可以使用桥设计模式达到可以使用同一个遥控器控制多台电视机的目的。这样的设计思想是多种设计模式反反复复使用基本思想。仔细思考下会发现多种设计模式的底层思想其实是相通的,不过具体实现或者某些细节,应用等有那么一点差别罢了。下面就实现一个TV和rem

2014-07-28 08:29:19 1537

原创 HDU 3635 Dragon Balls 七龙珠 Union Find算法

孙悟空要寻找七龙珠,这回是七龙珠的增强版了,因为这些龙珠会衍生,最后不止七颗龙珠了。悟空带着布玛的龙珠雷达探测器出发了,却发现布玛的龙珠雷达探测器的程序太垃圾了,所以找到我们这些ACM高手为龙珠雷达探测器写个程序,要求可以显示某颗龙珠所在的城市的位置,该龙珠所在的城市共有多少颗龙珠,龙珠移动过的次数。布玛是个有钱人啊,写个程序我要价5百万,不算过分吧。因为本程序需要用到Union Find

2014-07-27 23:51:34 1395

原创 POJ 1019 Number Sequence 题解

这又是一道看似简单,实际挺困难的题目。本来想做道基础题消遣一下的,没想到反被消遣了-_-|||。看个人的基础吧,对于数学好的会简单点,但是由于情况太多,需要都考虑全,故此难度应该在4星以上了。我这里使用的方法就是直接打表,然后直接模拟,利用打表去掉一大段数据,剩下数据量十分小了,故此可以直接模拟。打表是为了计算前面的周期数,把周期数直接去掉。主要难点是后面10位数以上的

2014-07-27 17:15:49 1091

原创 HDU 1020 Encoding 字符串

基本的字符串处理转换。喷一喷HDU这个超级垃圾的判断系统:如果把数字存入字符串数组中输出就会错误。如:A2B3C,如果其中的2和3保存如字符串数组中,然后输出那么就判断为WA,必须是即时输出数字2和3才算正确。这样判我WA,哎, HDU做好点你们的判断系统吧。#include #include using namespace std;int main(){ int T;

2014-07-27 09:26:09 1052 2

原创 Design Pattern Command 命令设计模式

本设计模式就是利用不同的类包起不同的命令,达到使用什么命令就实现什么操作。也可以进一步利用map和自己喜欢的命令词对接起来。一个执行类实际上已经包含了所有需要的操作了,如:class SuperMaker{public: string makeCar() { return "Car"; } string makePlane() { return "Plane";

2014-07-27 07:47:10 1465

原创 HDU 4548 美素数 素数题解

本题就是可以直接打表的,判断是否可以打表也需要技巧的:1 判断最大的数值为1000000,百万以下的数打表都是可以的2 可以线性预处理好,使用素数筛子法是可以接近线性预处理的。故此可以打表了。需要熟悉的基本知识点:1 素数筛子法 - 一两分钟之内写出代码2 一般素数判断法,因为位数相加之后的数值非常小,故此一般素数判断就可以了,如果写个primality test

2014-07-27 00:15:11 1326

原创 HDU 3549 Flow Problem 最大网络流

本题也是典型的最大流题解。很好理解最大流建议大家还是去看 Introduction to algorithm这本经典书。这里题解的特点是: 1 使用静态邻接表建图2 建立双向图,以便增加逆向流。3 合并重复边优化图使用邻接表解决网络流的关键是第二点。一开始一直都看不明白为什么需要逆向增加流,很多博客也是一句话概括掉了,故此还是看书比较能弄懂。推荐看书,这里不重复了。

2014-07-26 21:13:50 859

原创 Geeks Ford-Fulkerson Algorithm for Maximum Flow Problem 最大网络流问题

很久之前就想攻克一下网络流的问题了,一直拖着,一是觉得这部分的内容好像非常高级,二是还有很多其他算法也需要学习,三是觉得先补补相关算法会好点不过其实这虽然是图论比较高级的内容,但是基础打好了,那么还是不会太难的,而且它的相关算法并不多,熟悉图论之后就可以学习了,就算法不会二分图也可以学习。这里使用Ford-Fulkerson算法,其实现的方法叫做:Edmonds-Karp

2014-07-26 15:19:34 1971

原创 Flyweight Design Pattern 共享元设计模式

就是利用一个类来完成多种任务,不用每次都创建一个新类。个人觉得这个设计模式在C++里面,好像可以就使用一个函数代替,利用反复调用这个函数完成任务和反复利用这个类,好像差不多。不过既然是一个设计模式,那么就使用类来完成任务。而对于Java来说是不面向过程的,故此就必须使用这个设计模式了。我这里设计一个仓库来保存这样的类,需要的时候反复取出来使用。非常简单的设计模式:#inclu

2014-07-26 10:02:52 1268

原创 Design Pattern Visitor 访问者设计模式

访问者设计模式是已经有了一组Person对象了,然后不同的访问者访问这组对象,会有不同效果。这些访问者实际上就是一个可以让Person对象组执行的动作行为等。至于这些Person对象是如何执行这些访问者的动作的,那是已经在特定的不同的Person对象中设计好的。比如我们的访问者也许是一些动作集合的类,如:class Action{public: string present;

2014-07-25 20:54:26 971

原创 HDU1312 Red and Black 题解

一条递归搜索法题目,使用递归搜索法,但是实际不用重复计算方格。思路是:1 每搜索一个方格就改变当前方格的值为 ‘*’,或者任何其他非'.'的值,代表该方格已经走过了2 递归的时候不回复这个方格的值,就实际上不用重复搜索这个方格了,故此不用回溯#include #include #include #include using namespace std;int R,

2014-07-25 20:15:30 1207

原创 Design Pattern Interpreter 解析者模式

解析者本身是一个很大的设计模式,重点在于设计这个解析者本身,但是由于解析者本身很难设计,故此完善的解析者模式比较少应用,但是这个设计模式本身的思想却不难。下面简单实用C++实现一下解析者模式,使用不同的解析者,那么就会对于同样的内容解析出不同的结果。#include #include using namespace std;class Context{public:

2014-07-25 17:02:45 1083

原创 Double 与 Float 的值的比较结果

首先看geeksforgeeks上的两个程序:程序1:#includeint main(){ float x = 0.1; if (x == 0.1) printf("IF"); else if (x == 0.1f) printf("ELSE IF"); else printf("ELSE");}程

2014-07-25 10:54:01 1975

原创 HDU 1019 Least Common Multiple 数学题解

求一组数据的最小公倍数。先求公约数在求公倍数,利用公倍数,连续求所有数的公倍数就可以了。#include int GCD(int a, int b){ return b? GCD(b, a%b) : a;}inline int LCM(int a, int b){ return a / GCD(a, b) * b;}int main(){ int T, m, a,

2014-07-24 20:27:09 1073

原创 HDU 1018 Big Number 数学题解

Problem DescriptionIn many applications very large integers numbers are required. Some of these applications are using keys for secure transmission of data, encryption, etc. In this problem you ar

2014-07-24 18:31:47 1137

原创 POJ 1018 Communication System 题解

本题一看似乎是递归回溯剪枝的方法,我一提交,结果超时。然后又好像是使用DP,还可能我剪枝不够。想了很久,无奈忍不住偷看了下提示,发现方法真多,有贪心,DP,有高级剪枝的,还有三分法的,八仙过海各显神通啊。坏习惯了,没思考够深入就偷看提示了。幸好及时回头,还不需要看别人的代码了。自己做出来之后,有空看看多种解法的代码也好。然后我想出自己的思路了,使用贪心,剪枝,DP综合优化下,呵

2014-07-14 22:08:07 957

原创 POJ 1328 Radar Installation 贪心题解

本题是贪心法题解,不过需要自己观察出规律,这就不容易了,很容易出错。一般网上做法是找区间的方法。这里给出一个独特的方法:1 按照x轴大小排序2 从最左边的点循环,首先找到最小x轴的圆3 以这个圆判断可以包括右边的多少个圆,直到不可以包括下一个点,那么继续第2步,画一个新圆。看代码吧,应该很清晰直观的了。效率是O(n),虽然有嵌套循环,但是下标没有重复,一遍循环就可以了,

2014-07-14 13:51:45 1266 1

原创 Mediator Design Pattern 中介者模式

就是设计一个Mediator类,可以处理其他类的关系。Mediator类:1 拥有其他所有类的实例对象2 设置一个接口供其他类使用,其他类也拥有一个Mediator类成员,只需调用这个Mediator接口函数使用,无需自己处理关系。3 Mediator内部已经设置好各个类的关系了,其他类只要直接使用Mediator处理关系就可以了。下面是一个聊天室聊天是处理关系的实例程序:

2014-07-14 09:33:48 1125

原创 POJ 1028 Web Navigation 题解

考查代码能力的题目。也可以说是算法水题,呵呵。推荐新手练习代码能力。要增加难度就使用纯C实现一下stack,那么就有点难度了,可以使用数组模拟环形栈。做多了,我就直接使用STL了。#include #include #include #include using namespace std;int main(){ stack forward; stack ba

2014-07-13 19:49:58 1396

原创 POJ 2406 Power Strings KMP运用题解

本题是计算一个字符串能完整分成多少一模一样的子字符串。原来是使用KMP的next数组计算出来的

2014-07-13 17:10:11 891

原创 POJ 3461 Oulipo KMP算法题解

本题就是给出很多对字符串,然后问一个字符串在另外一个字符串出现的次数。就是所谓的Strstr函数啦。Leetcode有这道几乎一模一样的题目。使用KMP算法加速,算法高手必会的算法了。另外看见讨论说什么使用KMP还超时,最大可能是没有真正理解next table的含义,写了错误的代码,故此虽然自己运行结果正确,但是却没有真正发挥next table的作用,使得算法退化为暴力法了,所

2014-07-13 14:36:32 1257

原创 POJ 3259 Wormholes SPFA算法题解

本题其实也可以使用SPFA算法来求解的,不过就一个关键点,就是当某个顶点入列的次数超过所有顶点的总数的时候,就可以判断是有负环出现了。SPFA原来也是可以处理负环的。不过SPFA这种处理负环的方法自然比一般的Bellman Ford算法要慢点了。#include #include #include const int MAX_N = 501;const int MAX_M =

2014-07-13 13:20:43 939

原创 POJ 3259 Wormholes Bellman题解

本题就是需要检查有没有负环存在于路径中,使用Bellman Ford算法可以检查是否有负环存在。算法很简单,就是在Bellman Ford后面增加一个循环判断就可以了。题目故事很奇怪,小心读题。#include #include #include const int MAX_N = 501;const int MAX_M = 2501;const int MAX_W

2014-07-13 12:09:13 1038

原创 Proxy Design Pattern 代理设计模式

代理设计模式,这个模式很多用于服务器客户端之类的,上网也经常使用代理之类的,想起来感觉是很复杂的,不过这个设置模式本身是很简单的。就是一个类调用另外一个类的函数,客户调用的是一个类,而实际的工作是由另外一个类做的。体现这个设计模式的代码:#include class RealObj{public: virtual void handleReq() = 0;};

2014-07-13 09:22:55 1334

原创 POJ 1511 Invitation Cards SPFA算法题解

本算法就是Bellman-ford的改进,SPFA即 Shortest Path Faster Algorithm.解析这个算法的博文不少,不过没有什么好的证明。我觉得这个算法之所以正确,是因为每次新增加一个所谓的松弛点,那么其他任何点值可能以该松弛点为中介点,才可能找到比原来更加短的路径,故此是正确的。当然这个不是正规的证明。不过仔细想想这个算法,的确是巧妙,而他的妙点,就是这里了。

2014-07-12 15:28:09 966

原创 Composite Design Pattern 组合设计模式

组合设计模式,就是可以把多个类组合在一个大类中,形成一个树形结构。#include #include #include using namespace std;class Coporate{protected: string name; set coporate;public: explicit Coporate(string n = "", string d

2014-07-12 12:20:13 1420

原创 POJ 2367 Genealogical tree 拓扑题解

一条标准的拓扑题解。我这里的做法就是:保存单亲节点作为邻接表的邻接点,这样就很方便可以查找到那些点是没有单亲的节点,那么就可以输出该节点了。具体实现的方法有很多种的,比如记录每个节点的入度,输出一个节点之后,把这个节点对于其他节点的入度去掉,然后继续查找入度为零的点输出。这个是一般的做法了,效果和我的程序一样的。有兴趣的也可以参考下我这种做法。#

2014-07-11 15:28:48 1027

原创 POJ 3264 Balanced Lineup ST算法

ST算法即是sparse table算法,就是稀疏表的意思,就是利用二分法来划分一个表,划分为2的次方段,之后利用这个st表计算查询结果,可以使得预处理时间O(nlgn),而查询时间为O(1) ;那么有人会有疑问,既然查询时间是O(1),那么为什么这个算法很多时候并不比线段树快多少,甚至根本没有快过呢?因为其实查询时间为O(log(range)), range为查询区间的大小,因为

2014-07-11 13:39:47 1041

原创 Design Pattern Visitor 访问者模式

访问者模式,就是我们已经有一系列的对象了,那么就可以使用一个visitor对象一次性遍历所有的对象,就好像这个visitor访问了所有这些对象一样,所以就叫访问者模式。实现起来也很简单,就是三个基类,其他类都是这些基类的衍生类。下面的Action类就是访问者类了,而Person类就是被访问的对象类,而House是一个接待容器,可以接待不同的Action类。#include #incl

2014-07-11 09:32:09 1170

原创 HDU 1016 Prime Ring Problem 题解

Problem DescriptionA ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime

2014-07-10 17:02:04 1122

原创 HDU 1015 Safecracker 题解

Problem Description=== Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Klein safe behind a painting in the second-floor library. Klein safes are extremely rare; most of them,

2014-07-10 15:58:43 1674

OpenGL完美的心形

可以参考本人博客: http://blog.csdn.net/kenden23/article/details/27338943 是一个使用OpenGL FreeGlut画的一个完美的心形。

2014-05-28

简单Windows弹球程序

详细描述,请看下面博客: http://blog.csdn.net/kenden23/article/details/17268877

2013-12-14

第一人称3D镜头框架代码

http://blog.csdn.net/kenden23/article/details/14051187 这个博客讲解的代码框架。讲解的类部分另外下载,可在博客上找。

2013-11-02

第一人称3D镜头类

http://blog.csdn.net/kenden23/article/details/14051187 这个博客讲解的代码,可以实现一个3d漫游第一人称视觉的类。一个镜头类,可以控制3D视觉,实现漫游效果

2013-11-02

算法问题集合源文件 堆排序 吊桶排序 最大子段和等

这个是本博客算法专栏的部分.cpp源文件,方便大家打包下载,如果没有积分的话,可以到我博客粘贴,博客有完整的代码。 http://blog.csdn.net/column/details/billsalgorithm.html?page=1#12944927 这里是部分源文件,暂时没时间全部做好。 可以直接加入项目运行的,建议使用vs2012编译。

2013-10-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除