自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

bobten2008的专栏

The art of algorithm

  • 博客(161)
  • 资源 (9)
  • 收藏
  • 关注

原创 给定二叉树的前序和中序,判断是否可以构成一颗二叉树,如果可以输出后序

很简单,注意边界条件int main() { while (scanf("%d", &n) != EOF) { for (int i = 0; i < n; i++) { scanf("%d", &pre[i]); } for (int i = 0; i < n; i++) { scanf("%d", &in[i]); }

2013-08-14 10:49:35 1973

原创 行列有序数组求给定数是否存在

沿对角线二分,并对独行独列进行优化输入示例:样例输入: 3 351 2 34 5 67 8 93 312 3 45 6 78 9 103 3122 3 45 6 78 9 10样例输出: YesNoNo#include #include #include using namespace std;co

2013-08-14 09:34:28 1040

原创 一个数组只含0,1,2三种数,对这个数组排序,要求只能扫描一遍数组

#include using namespace std;void Swap(int* v1, int* v2) { int temp = *v1; *v1 = *v2; *v2 = temp;}void SortArray(int* array, int len) { int i = 0, j = len - 1, k = 0; while (k < j) {

2013-08-05 09:43:23 2727

原创 按层次打印二叉树元素

非常简单:#include #include using namespace std;struct Node { Node* left; Node* right; int value; Node(int v) { left = right = NULL; value = v; } ~Node() { if (left) {

2013-08-04 15:48:02 2539 1

原创 一颗完全二叉树,求其结点个数

网上看了很多人的答案,都说最优解是o(n),想到了一种更快的算法,负责度是O(lgn的平方),就是对左右子树进行二分,找最后一层的最右边那个结点即可:#include #include #include using namespace std;struct Node { Node* left; Node* right; ~Node() { if (lef

2013-08-03 20:29:45 3566

原创 快速排序的改进算法

今天想到了一种改进的快速排序,不知道之前有没有人想到过同样是快速排序,稍微一点改进可能带来运算效率的质变FAST_SORT_TYPE_1:是比较常见的版本FAST_SORT_TYPE_2:是我的改进版本,慢慢增加待排数组长度len,你会发现效率的差别逐渐显现出来

2011-08-30 22:07:54 1627 2

原创 如何求两个有序数组的第K个数

<br />给定两个已排序数组,如何求第K个数。传统的做法就是类似归并排序的方式,时间<br />复杂度是O(N),这里给出一个二分法,时间复杂度是O(lgN)<br /> <br />#include <iostream>#include <algorithm>#include <ctime>//#define DEBUG#define MINV(a, b) ((a) <= (b) ? (a) : (b))#define MAXV(a, b) ((a) >= (b) ? (a) :

2010-12-24 22:50:00 2539

原创 链式结构的快速排序

#include #include #define LEN 20#define MAX_VAL 100using namespace std;// 链式结构元素struct elem{ elem() { value = 0; next = NULL;

2010-11-09 14:42:00 1367

原创 链式结构的归并排序

struct node{int32_t value;node* head;node* tail;}int compare_node(node* node_1, node* node_2){if(node_1->value value){return -1;}else if(node_1->value == node_2->value){return 0;}else{return 1;}}/*对链式结构进行归并排序, 输入是待排序链表表头,返回值是排序后的表头指针sort_type = -1: 升序, 1:降

2010-10-19 15:56:00 1493

原创 编程之美 1.4 买书问题【贪心思路的分析】

<br />这段时间太忙,好久没有写CSDN了,今天在重新看编程之美1.4买书问题的时候有了新的体会,于是就记录下来。看来真是“温故而知新”<br /> <br />1.5首先给出了一个动态规划版本,我第一次看编程之美的时候,自己一下子也想到了动态规划版本,就没往后看了。今天重新看了下才知道后面的贪心才是精华。<br /> <br />(1)按照正常的思路,我们有了以下贪心策略:购买Y5本5卷,购买Y4-Y5本4卷,购买Y3-Y4本3卷,购买Y3-Y4本3卷,购买Y2-Y3本2卷,购买Y1-Y2本1卷<br

2010-09-30 20:50:00 1179

原创 诡异的程序_1【程序的效率问题】

下面的代码求int array[0, MAX_LEN - 1]中的最大值,这里MAX_LEN设定为30,求30个元素的数组中的最大值,整个程序居然花了7.563秒,这是为什么?#include #include #include#define MAX_LEN 30#define maxv(a, b) ((a) >= (b) ? (a) : (b))int array[MAX_LEN];int getmaxv(int n){ if(n == 1) return array

2010-07-07 16:54:00 1684 4

原创 【网易有道面试题一】求单词集可以唯一标识每个单词的最短前缀

这道题的给定一个单词集合,里面没有重复的单词,然后为每一个单词求出可以唯一标识这个单词的最短前缀.比如对于单词集合:输入:{abc, abcd}, 输出就是abc, abcd输入:{a, c}, 输出就是a, c输入:{abc, abd, abcd}, 输出就是abc, abd, abcd输入:{abc, bdc}, 输出就是 a, b为了节省空间和提高运算速度,字典树是一个非常好的选择,而且往往和前缀相关的问题都可以用字典树来解决.#include #include #define MAX_N 1

2010-06-28 11:44:00 3616

原创 POJ 2516 Minimum Cost 【MCMF:最小费用最大流】

/*第一次做最小代价最大流(MCMF)的题,所谓最小代价最大流就是要找到一个最大流量的方案且这个最大流所需要的费用是所有相等流量中最小的MCMF和普通的最大流问题的唯一区别是每次找增广路径是要找费用最小的路径,这就需要维护一个费用图,每次增流时需要将这次增流耗费的费用加到总费用上去并修改费用图。由于商品之间是不相关的,所以对每种商品分别使用MCMF就行,如果有一种商品得不到满足就跳出,如果能一直执行,则最后输出minCost即可*/#include #define MAX_VAL 99999999

2010-06-24 15:37:00 1508

转载 最小费用最大流问题

◆最小费用最大流【MCMF问题及数学模型】   在介绍最大流问题时,我们列举了一个最大物资输送流问题。如果这个问题的已知条件还包括每条边运送单位物资的费用,那么怎样运送,才能得到最大运输量,并且输送费用最少?这便是所谓最小费用最大流问题。   在最大流的有关定义的基础上,若每条有向边除权数c(e)(表示边容量)外还有另外一个权数w(e)(表示单位流所需费用),并且已求得该网络的最大流值为F, 那么最小费用最大流问题,显然可用以下线性规划模型加以描述:    Min ∑ w(e)f(e) e∈E  满

2010-06-23 10:24:00 2200

原创 POJ 2195 Going Home【KM算法-二分图的最优匹配】

 Going HomeTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 8380 Accepted: 4324DescriptionOn a grid map there are n little men and n houses. In each unit time, every little man can move one unit step, either horizontally, or vertically, to an

2010-06-23 08:56:00 1574

转载 全排列之Hash实现 - 变进制数 【转】

<br />我们经常使用的数的进制为“常数进制”,即始终逢p进1。例如,p进制数K可表示为<br />K = a0*p^0 + a1*p^1 + a2*p^2 + ... + an*p^n (其中0 <= ai <= p-1),<br />它可以表示任何一个自然数。<br /><br />对于这种常数进制表示法,以及各种进制之间的转换大家应该是很熟悉的了,但大家可能很少听说变进制数。这里我要介绍一种特殊的变进制数,它能够被用来实现 全排列的Hash函数,并且该Hash函数能够实现完美的防碰撞和空间利用(不会

2010-06-13 10:52:00 1426 1

转载 【网易有道10年编程赛 资格赛第一场】 第三题 最大和子序列 【转】

描述 给一个整数数组A={a1,a2,…an}, 将这个数组首尾相接连成一个环状,它的一个子序列是指这个数组连续的一段,比如a2,a3…ak,或者an,a1…ai。请从这个环上选取两个不重叠的非空子序列,使这两个子序列中的所有数字之和最大。在三个样例中分别选取的子序列是:样例一: {a1} {a3}样例二: {a1} {a3}样例三: {a5,a1} {a3} 输入 输入的第一行包含一个正整数T(1接下来每个测试数据包含两行,第一行是一个正整数n(2算法:分别求两段最大和以及两段最小和即

2010-05-31 16:54:00 1679

原创 去除表达式里面多余的()

去除表达式里面多余的()检查字符串表达式中的括号是否匹配;左括号数目同有括号数目不相等即为不匹配;去除多余的左括号或者右括号,优先保留先出现的括号;匹配后去除无效的括号:如:((表达式)) 应为(表达式);只考虑小括号,不考虑先出现右括号的情况;要求实现函数: (字符串最长长度为60;表达式正确性不需要考虑)void Bracket(char* src, char* dst);如果匹配则通过dst输出原串;如果不匹配则根据要求去处多于括号后通过dst输出匹配后的串示例输入:12+(345*25-34) 输出

2010-05-31 14:33:00 1538

原创 【网易有道10年编程赛 资格赛第一场】 第二题 有道搜索框

描述在有道搜索框中,当输入一个或者多个字符时,搜索框会出现一定数量的提示,如下图所示:现在给你N个单词和一些查询,请输出提示结果,为了简化这个问题,只需要输出以查询词为前缀的并且按字典序排列的最前面的8个单词,如果符合要求的单词一个也没有请只输出当前查询词。 输入 第一行是一个正整数N,表示词表中有N个单词。接下来有N行,每行都有一个单词,注意词表中的单词可能有重复,请忽略掉重复单词。所有的单词都由小写字母组成。接下来的一行有一个正整数Q,表示接下来有Q个查询。接下来Q行,每行有一个单词,表示一个查

2010-05-31 11:07:00 1599 1

原创 【网易有道10年编程赛 资格赛第一场】 第一题 另类的异或

 描述 对于普通的异或,其实是二进制的无进位的加法这里我们定义一种另类的异或A op B, op是一个仅由^组成的字符串,如果op中包含n个^,那么A op B表示A和B之间进行n+1进制的无进位的加法。下图展示了3 ^ 5 和 4 ^^ 5的计算过程输入 第一行有一个正整数T, 表示下面共有T组测试数据。接下来T行,每行有一组测试数据,是由空格隔开的三个部分组成:A B CA和C是两个十进制整数,B是一个字符串,由n个^组成1 #include using namespace st

2010-05-31 11:06:00 959

原创 【网易有道10年编程赛 网络热身赛】第三题 Sibonacci

菲波那切数列可以用下列的式子表示:     f(1)=1     f(2)=1     f(n)=f(n-1)+f(n-2) (n>=3)     现在我们根据这个规则定义另一种数列 命名为"辛波那切数列", 它是这样定义的:     s(x)=0 (x    s(x)=1 (0    s(x)=s(x-1)+s(x-3.14) (x>=1)     现在需要计算出s(x) MOD 1000000007的值。 输入     第一行有一个正整数T表示有T组测试数据。     接下来T行,每行包含一个数x。  

2010-05-31 11:02:00 794

原创 【网易有道10年编程赛 网络热身赛】第二题

描述     计算a的b次方对9907取模的值。 输入     第一行有一个正整数T,表示有T组测试数据。     接下来T行,每行是一组测试数据,包含两个整数a和b。     其中T输出     有T行,依次输出每组数据的结果。 样例输入     3     1 2     2 3     3 4 样例输出     1     8     81 /*快速模指幂,哈哈,用了自己以前写的一个模板*/#include #include #include using namespace std;/

2010-05-31 11:00:00 884

原创 POJ 2902 Intercepting Missiles

Intercepting MissilesTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 122 Accepted: 54DescriptionOur country is under enemys attack. Hostile bombers a

2010-05-20 10:21:00 822

原创 POJ 2901 Hotel

 http://acm.pku.edu.cn/JudgeOnline/problem?id=2901HotelTime Limit: 10000MS Memory Limit: 65536KTotal Submissions: 561 Accepted: 156DescriptionZebel, the tour co

2010-05-19 09:02:00 1449

原创 POJ 2900 Griddy Hobby

Griddy HobbyTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 414 Accepted: 146DescriptionAttending a boring weekly session, our professor started drawi

2010-05-16 23:26:00 1119

转载 怎样写一个拼写检查器 Peter Norvig 翻译: Eric You XU

怎样写一个拼写检查器 Peter Norvig翻译: Eric You XU上个星期, 我的两个朋友 Dean 和 Bill 分别告诉我说他们对 Google 的快速高质量的拼写检查工具感到惊奇. 比如说在搜索的时候键入 [speling], 在不到 0.1 秒的时间内, Google 会返回: 你要找的是不是 [spelling]. (Yahoo! 和微软也有类似的功能). 让我感到

2010-04-12 21:21:00 1594

原创 GOOGLE的一道笔试题—求给定连通无环无向图可以生成的最小高度树

/*最近看到一道谷歌笔试题,“已知一颗无向无环连通图T的所有顶点和边的信息,现需要将其转换为一棵树,要求树的深度最小,请设计一个算法找到所有满足要求的树的根结点,并分析时空复杂度(描述算法即可,无需代码)”其实就是给定一个无向连通图,求以哪些顶点为根可以得到深度最小的树,思路比较简单,主要有两个步骤:(1)首先选取1号结点作为树根,进行一遍DFS,在DFS时计算每个节点

2010-04-11 16:36:00 3528 5

原创 POJ 2112 Optimal Milking

 Optimal MilkingTime Limit: 2000MS Memory Limit: 30000KTotal Submissions: 3151 Accepted: 1260Case Time Limit: 1000MSDescriptionFJ has moved his K (1 <= K

2010-01-11 23:51:00 1169

原创 POJ 2060 Taxi Cab Scheme

/*最小路径覆盖,建图很重要,对于两个destionatin schedule i和j,如果i的出发时间小于j且完成i的时间加上从i的目的地到j的起始地的时间小于j的出发时间,那么i到j有一条边*/#include #include #define MAX_N 505struct p{    int nein;    int neins[MAX_N]

2010-01-05 18:37:00 721

原创 POJ 2074 Line of Sight

 Line of SightTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 1406 Accepted: 423DescriptionAn architect is very proud of his new home and wants to be

2010-01-05 13:34:00 1649 1

原创 POJ 2079 Triangle

 TriangleTime Limit: 3000MS Memory Limit: 30000KTotal Submissions: 4224 Accepted: 1149DescriptionGiven n distinct points on a plane, your task is to find the tr

2010-01-02 16:31:00 1967

原创 POJ 2080 Calendar

 CalendarTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 6463 Accepted: 2430DescriptionA calendar is a system for measuring time, from hours and minutes

2010-01-01 15:14:00 689

原创 POJ 2082 Terrible Sets

/*这题的题目比较难读懂,其实就是给定坐标系上一系列相邻的矩形,高度不等,求把这些矩形连起来看能够得到的最大矩形的面积.这题我一开始想到的是需要用堆栈来往后处理,但是一直想不出来Discuss里面说的O(N)的算法,再加上昨天又是09年最后一天,实在没心情搞下去了.今天早上睡了个懒觉,起来状态不错,一下就想出了O(N)的算法,要想达到O(N)必须对矩形进行合并.具体思路如下:(

2010-01-01 11:16:00 2050 1

原创 POJ 2084 Game of Connections

 Game of ConnectionsTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 4839 Accepted: 2515DescriptionThis is a small but ancient game. You are supposed to

2009-12-31 20:16:00 2286 2

原创 POJ 2085 Inversion

 InversionTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 2631 Accepted: 1143DescriptionThe inversion number of an integer sequence a1, a2, . . . , an i

2009-12-30 22:56:00 1166 1

原创 POJ 2049 Finding Nemo

/*做完这题我打算看《海底总动员》Demo Demo好可爱用广搜过的, 主要思路如下:(1)首先是建图, 由于输入给的都是线段, 但是我们平常处理这类问题都是转换为网格来做的, 因此需要将线段转换为网格.转化的方法是对于每个格子,用其左上角点的坐标来表示这个格子,如果其左上角点的坐标是[i][j],那么这个格子就表示为[i][j].将其四周边界的四条线段归这个格子管.即为每个格

2009-12-28 20:03:00 3177 1

原创 POJ 2046 Gap

/*BFS,利用set来判重.将状态封装到string大大简化了处理过程*/#include #include #include #include using namespace std;set hashSets;struct elem{    int steps;    string state;};queue bfsq;

2009-12-26 18:51:00 1367

原创 POJ 2044 Weather Forecast

/*深度优先搜索,需要记忆状态,状态的记忆包括四个角到目前为止没有下雨的时间+云当前所在的位置+当前的天数,一开始写错了一个地方害我调了N久,最近为啥没状态*/#include #define MAX_N 370#define MAX_S 80000using namespace std;struct day{    int state;}day

2009-12-26 14:57:00 1185

原创 POJ 2036 I Conduit!

 I Conduit!Time Limit: 2000MS Memory Limit: 30000KTotal Submissions: 1313 Accepted: 245DescriptionIrv Kenneth Diggit works for a company that excavates trenches

2009-12-20 15:27:00 1171

原创 POJ 2030 The Secret Number

 The Secret NumberTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 1704 Accepted: 564DescriptionYour job is to find out the secret number hidden in a mat

2009-12-19 16:19:00 1221

Learning Python 第三版

python 第三版,学习Python入门级的好教材

2010-05-19

ACM Trie树 模板 字典树

ACM Trie树 模板,字典树模板,数据结构

2010-05-19

大数运算工具C++版

用C++实现的大数运算工具 包括:加 减 乘 除 指数 模指幂 等常见运算

2009-10-14

C++实现的大数运算工具 v1.1

用C++实现的大数运算工具; 包括大数加减乘除,模指幂等常用运行! 原版v1.0中的乘法运算存在一个bug,本版本对这个bug进行了修正,所以,下载请下载本版本,不要下载v1.0

2009-08-06

C++实现的大数运算工具 v1.0

用C++实现的大数运算工具; 包括大数加减乘除,模指幂等常用运行! 注:此版本的大数乘法存在一个bug,v1.1对其进行了修正。请下载最新的1.1版本

2009-06-24

RSA 公钥加密算法实现

RSA公钥加密算法实现 当前版本是1.0,版本很快会进行完善!

2009-06-08

POJ 1861 Network

利用并查集判断环路,以及快速排序计算最小生成树

2009-05-27

JAVA下基于邻接表的图的通用算法实现

(1) 基于邻接表的图的构建功能 (2) 标准Dijkstra算法 (3) 有向图的强连通算法 Environment: Eclipse 3.4 + JDK 1.6 注:目前只实现了以上三个功能,但由于各功能都基于模块化分解的思想实现,所以加入新功能会比较方便,易于扩展。

2009-04-15

空空如也

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

TA关注的人

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