自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jollyjumper的专栏

一点记录

  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

原创 最少交换次数

将一个无序序列变成有序(序列中没有相等的数),可以进行任意两个位置的交换操作,求最少的交换次数如:5 2 1 4 3转成:0 1 4 5 9循环分解:(9 0 4)(1)(5),只需将(9 0 4)分解即可。而(1 2 ... n)=(1 2 ... n-1)(1 n)=(1 2)(1 3)...(1 n)因此(9 0 4)可以分解为两个置换。所以该序列只需

2010-02-27 14:51:00 2244

原创 有序数组归并

写下这段文字纯粹因为太生疏了。下午花了很多时间写有序数组的归并陷入死胡同,结果是证明了两个数组归并没有辅助数组时不幸的。通常的数组归并,对于大小为m和n的数组,需要m+n的辅助数组,写起来并不复杂。有次面试的时候要求写一个只有n辅助大小的做法。将b数组拷到a数组中,然后在a,b中选小的逐个放入a中。复杂一点,除了省点内存外意义不大,可能效率还降低。以下代码在vs2005下编译运行。#i

2010-02-27 14:50:00 650

原创 求逆序数

POJ2299 Ultra-sort可以转成求逆序数。如果规模比较小,求逆序数可以用冒泡的方法做,简单。还可以用归并排序做,先分别求左右两部分的逆序数,两部分都排好序后再求两者之间的逆序数。因此求逆序数是归并排序的副产品。与归并排序的主要差别也就在一句ret += (a + m - posa); 没有ac,惭愧。 #include #include using namesp

2010-02-27 14:49:00 622

原创 使用offsetof编写链结构

在c中,要实现一个通用的双向链表,我们一般的做法是这样定义节点结构:struct node{    void* pdata;    struct node* prev;    struct node* next;};也就是数据和节点是分开的,数据单独指向一块内存,这样在内存上有点不爽,我们希望数据和节点链域是紧密存放的,这样一个节点内存只分配一次,可是c中没有泛型,怎么让不同数据类型与链域紧密存放

2010-02-27 14:28:00 557

转载 从Larbin看互联网爬虫设计

互联网是一个庞大的非结构化的数据库,将数据有效的检索并组织呈现出来有着巨大的应用前景,尤其是类似RSS的以XML为基础的结构化的数据越来越多,内容的组织方式越来越灵活,检索组织并呈现会有着越来越广泛的应用范围,同时在时效性和可读性上也会有越来越高的要求。这一切的基础是爬虫,信息的来源入口。一个高效,灵活可扩展的爬虫对以上应用都有着无可替代的重要意义。要设计一个爬虫,首先需要考虑的效率。对于网络

2010-02-23 18:24:00 712

转载 网络爬虫设计——URL去重存储库设计

原文:http://blog.163.com/dm386/blog/static/92105164200941533238802/ 在爬虫启动工作的过程中,我们不希望同一个网页被多次下载,因为重复下载不仅会浪费CPU机时,还会为搜索引擎系统增加负荷。而想要控制这种重复性下载问题,就要考虑下载所依据的超链接,只要能够控制待下载的URL不重复,基本可以解决同一个网页重复下载的问题。非常容易

2010-02-23 18:19:00 1297

原创 HTTP缓存ETAG/Last-Modified

在浏览器第一次请求某一个URL时,服务器的返回状态是20,内容是你请求的资源,同时又一个Last-Modified属性标记此文件在服务器最后被修改的时间,格式类似这样:Last-Modified:Fri,12 May 2006 18:53:33 GMT客户端第二次请求此URL时,根据http协议的规定,浏览器会想服务器传送If-Modified-Since报头,询问该时间之后文件是否被修改

2010-02-23 17:52:00 619

原创 POJ1151 离散化

用二维线段树做太麻烦代码不好维护,纯离散化没ac,尽量使用stl。。。不知道哪里错了,先记一下。//纯离散化 O(n^3)复杂度#include #include #include using namespace std;struct Rect{ double left,top,right,bottom;}rects[200];bool blocks[1024][1024];vector xvec

2010-02-09 00:21:00 653

原创 POJ 2479 最大子段和dp

#include short a[50000];int b[50000],c[50000];/*b[i]是[i,n-1]的最大子段和,c[i]是[0,i]的最大子段和*/int main(void){ short t,n; int i,sum,max,prev,tmp; scanf("%hd",&t); while (t) { scanf("%hd",&n); for (i = 0; i

2010-02-09 00:20:00 870

原创 性能测试

最近老听到有人说性能的问题。想起以前都直接用GetTickCount未免不够精确。GetTickCount和TimeGetTime应该没什么差别,只是位于不同的dll(前者是kernel32.dll,后者是winmm.dll),可以说是提供者不同。要精确计时,应使用QueryPerformanceCounter获得硬件时钟计数,QueryPerformanceFrequency获得时钟频率,二者相

2010-02-09 00:20:00 583

原创 POJ 1050 最大子矩阵和

确定好起始列i和终止列j,将问题转化为一维的最大子段和,所以时间复杂度为o(n^3),而最直接的做法先计算(i,j,k)的值,然后再求最大值,复杂度为o(n^6)#include using namespace std;#define M 100int a[M][M],b[M];int MaxSub(int n, int *a) //最大子段函数{ int sum = INT_MIN; int b

2010-02-09 00:19:00 462

原创 环链表、相交链表的问题

有一种直接快速的方法,在每个链表节点处挂一个标志,表示是否访问过,如果在遍历过程中找到已置标志位的节点,则该节点就是环入口点,遍历结束没找到说明不带环。经典的做法是用快慢指针法。快指针步进2,慢指针步进1,如有环必然相遇,无环时会有指针走到NULL。这样的复杂度为o(n)。理由是:假定环长为r,在慢指针入环时,快指针在它前面k步处,那么快指针必在第(r-k)步时与慢指针会于离环起点(r-k)步处。

2010-02-09 00:17:00 680

原创 POJ 1195 二维树状数组

这道题教我们怎么使用二维的树状数组。#include int lowerbit(int a){ return (a ^ (a & (a - 1)));}int n,c[1025][1025];void add(int x,int y,int delta){ int y_save = y; for (; x { y = y_save; for (; y { c[x][y] += del

2010-02-09 00:16:00 344

原创 寻找水王

编程之美中寻找水王就是xoj 1054寻找黑客。可以将整个数组排序,第n/2个即是答案。这样时间复杂度为o(nlogn),还要n的空间。可以每次去除两个不同id的记录,这样去除的记录中水王的记录总是小于等于1/2,而总的当中水王记录大于1/2,那么剩下的记录中水王的记录也总是超过1/2,到最后剩下的记录就是水王了。如果显示地删除记录的话,记录要全部保存,而且不能用数组保存,得用链表,因为经常删除,

2010-02-09 00:16:00 614

原创 内存泄漏定位

inline void EnableMemoryLeakCheck(void){    _CrtSetDbgFlag(_CrgSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);}#ifdef _DEBUG#define new new(__NORMAL__BLOCK,__FILE__,__LINE__)#endifvoid main(

2010-02-09 00:15:00 339

原创 如何判断big-endian

int__db_isbigendian(){    union {                    /* From Harbison & Steele. */        long l;        char c[sizeof(long)];    } u;    u.l = 1;    return (u.c[sizeof(long) - 1] == 1);}

2010-02-09 00:15:00 538

原创 XOJ 1063 TSP的dp做法

我的做法是记录从起始点到终点,中间经过特定点集的路径的权值总和。表压缩成两行。可以优化的地方:由于图是无向图,而找的是回路,所以只需做一半的工作;totalcost第三维虽然是2048,但遍历时可以只遍历1024次。标准的做法是用带分支限界的回溯,做法很简洁。如果用广度有限搜索,怎么剪枝呢?#include #include int dist[12][12];int totalcost[2][12

2010-02-09 00:14:00 705

原创 POJ 3624 0-1背包问题

#include #define max(a,b) ((a) > (b) ? (a) : (b))int sum[12881],c,w,N,M;int main(){ int i,j,maximum = 0x80000000,tmp; scanf("%d%d", &N, &M); scanf("%d%d", &w, &c); if (w { sum[w] = c; } for (i = 1;

2010-02-09 00:14:00 561

原创 背包问题总总

0-1背包问题(一种最多取一件,通常用dp)任意分割的背包问题(最有装载)(贪心)完全背包问题(一种可取无限件)多重背包问题(一种最多取n[i]件)分组背包问题(一个分组只能取一种)有依赖的背包问题(取了i必须取j)适配背包问题(刚好装满背包) 

2010-02-09 00:13:00 429

原创 c实现的内存池

中间用简单链表就可以,效率不错,分配时比老程的快,没有详细测试。做全局的分配释放函数,可以像sgi stl中那样建16个全局的内存池,释放时还可以提供一个带大小的函数以提高效率。新的block放在链表首部,对连续的new有利,对后new先delete有利。做成环链表的好处是成功回收空间后,让blocklist指向该block,这样下次分配时就不用遍历blocklist了。删除时如果块回收之后全部空

2010-02-09 00:11:00 714

原创 POJ 1113 凸包 没有ac

#include #include #include #include #include #define PI 3.1415926535898using namespace std;struct point_t{ long x; long y;};inline bool operator { long diff = pt1.x - pt2.x; if (diff { return true;

2010-02-09 00:10:00 325

原创 第一个graham扫描法求的凸包程序

昨天发现邓俊辉译的计算几何上讲的凸包算法非常清晰简洁,今天也尝试写一个。判断向量是左转还是右转,最简便的方法是用叉乘,叉乘小于0表示右转,=0表示共线,大于0表示左转。在MFC上做的时候还要注意坐标的问题,逻辑上的上凸包画出来实际上是下凸包,下凸包对应于图上的上凸包。bool operator { long diff = pt1.x - pt2.x; if (diff { return tru

2010-02-09 00:10:00 991

原创 如何求解二元一次不定方程的整数解

这里讨论的二元一次不定方程专指ax+by=c(a*b≠0,a,b,c∈Z)-----①定理一:方程①有整数解的充分必要条件是(a,b)|c((a,b)即Gcd(a,b),下同)定理二(裴蜀定理)设(a,b)=1,则方程①的全部整数解可表为:x=x0+bt,y=y0-at(x0,y0是方程的一组整数解,t为任意整数)也可以表述为:方程①的全部整数解可表为:x=x0+bt/(a,b),y=y0-at/

2010-02-09 00:09:00 8496

原创 POJ 1458 最长公共子序列

#include #include char str1[1024], str2[1024];short lcs[1024][1024];#define MAX(a,b) ((a) > (b) ? (a) : (b))int main(){ long i, j, l1, l2; while (~scanf("%s%s", str1, str2)) { l1 = strlen(str1); l2

2010-02-09 00:09:00 527

转载 C/C++中的日期和时间

写得很完整,可以画图标出各个类型转换关系。Unix高级环境编程也讲得很细致,也果然有我画的图。摘要: 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。 关键字: UTC(世界标准时间),Calendar Time(

2010-02-09 00:07:00 481

原创 UTF8笔记

unicode和ucs字符分别用两个字节和四个字节表示,这样存储时非常浪费。有鉴于此出现了unicode/ucs的压缩形式--UTF8(unicode transformation format-8 或 UCS transformation formats)。UTF8以8bits为最小编码单位,每个字符可能是一个字节,也可能是多个字节,当然也有基于16bits和32bits的UTF16和UTF3,

2010-02-09 00:05:00 423

原创 线段树求周长求交面积的做法

求周长的做法是对每个段,用线段树计算出不相交的区间个数,至于求区间个数,有点像扫描线的做法,也是先排序,排序之后就是求括号序列有多少个区间,很有技巧。然后就是段的长度*区间个数*2,然后对矩形坐标进行关于y=x对称,再做一次就是完整的周长了。受求周长做法的启发,可以得到求矩形交面积的做法,需要一个一维线段树,记录x方向线段的信息,还要一个二维线段树记录各部分是否被覆盖,一维线段树在某线段处ad

2010-02-09 00:04:00 1194

原创 freopen用法

当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中。但由于调试往往不能一次成功,每次运行时,都要重新输入一遍测试数据,对于有大量输入数据的题目,输入数据需要花费大量时间。 使用freopen函数可以解决测试数据输入问题,避免重复输入,不失为一种简单而有效的解决方法。 如:freopen("debug/

2010-02-09 00:03:00 939

原创 括号序列问题

给定一个括号序列,如:())(()(())()如何判断这个序列是否合法?用+标定(,-标定),数值上分别是1和-1,这样从左到用扫描一旦出现和小于0则非法(对称地从右到左扫描一旦和大于0则非法),没有出现非法情况则合法。这个括号序列包含了几个连续区间?从左到有扫描,一旦出现和为0,则为一个区间(从右到左扫描亦可)这些问题虽然很简单,但应该很常用。用于连续区间计数,平面上多个矩形的交(甚至可以求几重

2010-02-09 00:03:00 1275 1

原创 不同编码的文本文件的区别

核心编程上说记事本识别不同编码文件时是通过IsTextUnicode测试的。不是这样的。不同编码的文本文件头部是不一样的。记事本通过这些头判断出属于何种编码。Unicode头部是FF FE标志。UTF8总是加EF BB BF。Unicode big endian则是FE FF。ANSI没有头。这实际上是标准的。这些头称为BOM(byte order mask)。utf-16,utf-32也都有BO

2010-02-09 00:02:00 596

原创 unix,MAC和dos文件格式的区别

区别仅在于换行符。unix中:/nmac中:/rdos中:/r/n

2010-02-09 00:02:00 840

原创 本地化国际化拾遗

计算机对多国语言的处理,大致分为三个阶段。1)ASCII码:只支持英文2)  ANSI编码:使用0x80-0xff范围内的两个字节表示一个字符。不同国家使用不同编码。所谓的本地化。3)unicode:国际化。设置运行时ANSI编码:SetLocale(LC_ALL, ".936");//vc中SetLocale(LC_ALL, "ZH_CN.GBK");//GCC中在vc中可以指定编译时存储字符串

2010-02-09 00:01:00 638

转载 dll调试方法

方法一:在dll工程中project settings->Debug->Executable for debug session下写入exe,在dll中设断点运行即可。方法二:在exe工程中project settings->debug->category选additional dlls,将要调试的dll放入,这样即使dll是通过loadlibrary调用的,也一样可以调试。

2010-02-09 00:01:00 631

转载 关于PCRE在VC中的使用

PCRE 官网 http://www.pcre.org/PCRE Windows版本(包含已编译文件) http://www.psyon.org/projects/pcre-win32/index.php1)psyon.org编译好的lib只能在vc7以上版本使用,因为这些lib使用了/GS编译开关。在vc显示如下错误:error LNK2001:unresolved external symbo

2010-02-09 00:00:00 3343

原创 学用pcre

今天在vc下用pcre对cpp936里面的数据进行了提取,费了好长时间,知道了正则表达式的一些好处。原来我以为正则表达式都只用来识别的,但pcre中可以取出各个标记子表达式的位置,从而在exec时可以提取出需要的子串,非常好用。每个标记子表达式在posvec的序列中的位置是静态的。也就是你需要提取的子串的posvec你是知道的,其索引相当于从根节点先序遍历的索引(从0开始)。不带括号的表达式部分可

2010-02-08 23:59:00 935

原创 POI 2001 goldmine(没有ac)

金矿 问题描述金矿的老师傅年底要退休了。经理为了奖赏他的尽职尽责的工作,决定在一块包含 n(n ≤ 15000) 个采金点的长方形土地中划出一块长度为 S ,宽度为 W 的区域奖励给他(1 ≤ s , w ≤ 10 000)。老师傅可以自己选择这块地的位置,显然其 中包含的采金点越多越好。你的任务就是计算最多能得到多少个采金点。如果一个采金点的位置在长方形的边上,它也应当被计算在内。输入格式输入文

2010-02-08 23:58:00 1355

转载 Windows 2000/XP上如何调用GB18030字符

安装gb18030工具包。下载:http://www.microsoft.com/downloads/details.aspx?FamilyID=93295d9c-89fc-4cba-ab19-ee176ea61d04&displaylang=zh-cnhttp://download.pchome.net/utility/lan/gbbig5/10802.htmlWindows 2000/XP上为

2010-02-08 23:57:00 3704

原创 一种树结构相似模型的求解

例如我们需要判断两个网页结构是否相似(又或者该网页中两个子结构是否相似)。对于两个树节点,我们定义它们的相似度,相似度由两部分相加起来,一是这两个节点本身的value,attribute等属性,二是其孩子中的最大递增相似子序列(套用最大递增公共子序列)的相似度之和,每个节点在相似度中的权值也是不同的,要使它们的总相似度最大,使用类似于求最大公共子序列的动态规划方法:sim[i,j] = max(w

2010-02-08 23:56:00 847

原创 求解fibonacci数

做法是变成矩阵的乘方,而乘方的复杂度为o(logn)。 #include int n;struct tag22Rect{ int a, b; int c, d;}rects[32];void InitGlobal(){ tag22Rect* p; rects[0].a = 0; rects[0].b = 1; rects[0].c = 1; rects[0].d = 1; for (p =

2010-02-08 23:54:00 439

Scons User Guide 2.01

Scons号称下一代自动编译工具,相比于make,它的生成脚本使用Python而不像makefile那样新创造一种语言。我认为它是autoconfig,makefile的很好替代。

2011-05-11

空空如也

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

TA关注的人

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