- 博客(70)
- 资源 (5)
- 收藏
- 关注
原创 求多个区间合并后区间大小的巧妙解决方法
上图一共有5个区间,分别是[0,2]、[2,4]、[8,11]、[7,11]、[15,18]。如果要求这些区间合并后区间的大小,有两种简单的方法。 方法一:比较每两个区间的范围,如果两个区间有交集,则合并它们。最后所有区间会合并成几个离散的大区间,结果为这些区间大小之和。这种方法的时间复杂度是O(n^2)。 方法二:使用一个可以覆盖所有区间范围的数组,对每个区间进行标记,结果为数组中被
2012-07-02 01:40:40
10598
原创 do...while(0)的作用
今天在看一段开源代码时,发现里面的宏函数几乎都写成这样:#define xxx \ do { \ ... \ } while(0)宏中间的代码只会执行一次,为什么要写在do...while(0)循环中呢?假设一个宏函数定义为:#define fun() \ fun1(); \ fun2();那么在执行下面这段语句时就会出现问题。i
2012-06-09 22:16:19
1002
原创 最后一次比赛
今天省赛,本该作为幕后工作者的我耐不住寂寞,上场和小朋友们HI了一把。算是打完最后一次酱油,下个月就毕业滚蛋了,是时候告别相伴四年的ACM/ICPC了。 要说告别的不舍,其实也没有太多。去年北京区域赛比赛完应该才算是正式的告别,况且对未来工作有点小期待,不能活在过去,是时候开始新的生活了。但是打完这次酱油,有了一些感悟,觉得有必要记录下来。相比于拿名次,其实享受比赛过程是最重要的;相比于
2012-05-20 21:59:15
1619
2
原创 CString GetBuffer()和ReleaseBuffer()分析
首先说明一点,ReleaseBuffer()作用不是释放空间。无论如何使用CString,都不需要用户手动去释放它的缓冲区。如果我们需要对CString字符缓冲区直接操作时,使用GetBuffer()获得缓冲区指针。注意操作时字符串必须以'\0'结尾。操作后,调用CString其它成员函数之前必须调用ReleaseBuffer()。特别是字符串长度改变后,如果没有ReleaseBuffer
2012-04-19 14:10:52
1383
原创 AfxEndThread导致内存泄露
UINT WorkingProc(LPVOID pParam){ CString strFolderPath = _T("..."); AfxEndThread(0); return 0;}WorkingProc为线程函数,AfxEndThread函数执行后线程直接结束,不会调用strFolderPath的析构函数,导致内存泄露!所以AfxEndThread
2012-04-06 19:04:05
2222
原创 Source Insight下载及注册码
下载地址:http://www.sourceinsight.com/down35.html注册码: SI3US-205035-36448 SI3US-466908-65897 SI3US-368932-59383 SI3US-065458-30661 SI3US-759512-70207
2012-04-01 18:11:20
34670
原创 Berkele DB安装
# cd /usr/local/src# wget http://download.oracle.com/berkeley-db/db-5.3.15.tar.gz# tar -zxvf db-5.3.15.tar.gz# cd db-5.3.15# cd build_unix# ../dist/configure# make# make install// 通知
2012-02-17 11:54:14
1416
原创 Ubuntu root
在Ubuntu中,root账户被屏蔽了。 为了使用root账户,首先要给root一个密码: # sudo passwd root 图形界面的root权限: # gksudo [application]
2012-02-17 11:24:55
598
原创 Linux下默认方式安装OpenSSL
安装openssl 1、解压软件: # tar xvfz openssl-VERSION.tar.gz 2、安装 # cd openssl-VERSION# ./config # make # make test # make install 注:将VERSION换成要安装的版本。
2012-01-31 16:32:55
1201
原创 课程设计两连发之局域网通讯软件
我今年大四,明年就毕业了。料想为课程设计写的这两个程序以后也不会再拿出来看了,索性就开源了。希望可以帮助到大家,可以当课程设计交差,也可以优化一下发扬光大。 这个软件总体来说山寨飞鸽传书。虽然类似的开源软件非常多,比这个写得好的也非常非常多。但实话说,这种技术含量不是很高的东西写出来拼的就是细节。这个软件虽然简单,但是为了把细节做好,我还是费了一番功夫,所以不舍得直接删掉。程序写得比较简单,
2012-01-01 20:44:36
1298
原创 课程设计两连发之中国象棋人机博弈
我今年大四,明年就毕业了。料想为课程设计写的这两个程序以后也不会再拿出来看了,索性就开源了。希望可以帮助到大家,可以当课程设计交差,也可以优化一下发扬光大。 这个前后大概花了两个星期。写好到目前为止还没有输过,大概和同学下了十几盘。当然,同学都不是高手,只是懂象棋规则。不过总的来说,我觉得效果还行。 算法是MaxMin搜索或者说博弈搜索,加了AlphaBeta剪枝、历史走法启发。局面评
2012-01-01 20:19:24
3450
10
原创 HDU 4063
花了一天时间,整理了一个几何模板...判断一条线段是否都被圆包围只需要判断线段被圆分割开的所有区间是否覆盖了整条线段...#include #include #include #include #include #include #include #incl
2011-10-10 18:59:20
1090
原创 HDU 1880
map超空间了,那就排序加二分呗...#include #include #include #include #include #include #include #include #include #include #include #include
2011-10-05 19:16:54
860
原创 HDU 2243
AC自动机+矩阵乘法 again...#include #include #include #include #include #include #include #include #include #include #include #includ
2011-10-04 21:04:33
922
原创 PKU 2778
AC自动机+矩阵乘法...#include #include #include #include #include #include #include #include #include #include #include #include #def
2011-10-04 21:03:01
747
原创 HDU 3065
又一AC自动机模板题...#include #include #include #include #include #include #include #include #include #include #include #include #def
2011-10-03 16:22:57
796
原创 HDU 2065
一开始以为递推公式是f[n]=2*f[n-1]+2*f[n-2]。但这个公式显然是错的,这个公式相当于限制了A,C必须成对出现,比如ABA这种就计算不到了。 到网上搜了一下才发现原来公式是这样的,设f1[n]为长度为n的序列,A,C都出现偶数次的方法数;f2[n]为长度
2011-10-03 12:03:15
749
原创 HDU 2222
AC自动机模板...#include #include #include #include #include #include #include #include #include #include #include #include #defi
2011-10-01 10:37:02
751
原创 HDU 3902
判断二维平面上的一个图形是否是轴对称图形,图形的点按顺时针方向或者逆时针方向给出。直接判断的话,情况很多,很复杂。对称轴可能穿过图形中的一点,或者穿过相邻两点的中点。把图形中每相邻两点的中点加入进去,情况就变得非常简单了。假设原图有n个点,加入中点后就有2*n个点。如果图形是轴对
2011-09-30 20:41:27
826
原创 HDU 4033
余弦定理:假设一个三角形的三条边是a,b,c,对应的三个角是A,B,C,那么cos(C)=(a^2+b^2-c^2)/(2*a*b)。这题先二分正多边形的边长,然后利用余弦定理计算出多边形中的点和多边形的顶点构成的三角形的角度和。显然角度和应该是2*pi。如果大于2*pi,说明设
2011-09-30 11:06:04
666
原创 HDU 2485
看来我还是不理解最小割的内涵...这题求的是最少去掉几个顶点,使得图的源点和汇点不连通。想想最小割的定义,如果图中每条边的流量都是1,那么最小割就变成了去掉最少的边,使得图的源点和汇点不连通。把这题中每个顶点拆分成两个顶点,中间用一条流量为1的边连接...这样,模型就满足最小割模
2011-09-29 19:47:59
1116
原创 PKU 2987
最大权闭合图。题意我不是很理解,如果按英语原句翻译的话。我觉得输入的正值是亏损,负值是利润。这个可以参考例样,例样解雇了4、5,获得了2的利润。对于第二问如何建图,可以参考其他博客。这个需要画到纸上慢慢理解,不好解释。 对于第一问,仔细分析可以发现: 1.
2011-09-29 11:45:43
839
原创 HDU 3221
2009上海区域赛题,也是剑哥的银牌题...把数学模型抽象出来后可以发现这题其实是求f(n) = f(n-1) * f(n-2), f(1) = a, f(2) = b。n最大为10^9,暴力肯定不行。进一步可以发现f(n)中因数a的个数为fab(n-2),因数b的个数为fab(
2011-09-20 13:19:07
934
2
原创 HDU 3683
因为少了一句if,这个AC迟来了一年...解法:假设A先手,B后手。 1.如果A有必胜点,放下去即连成5个,那么A一步获胜。 2.如果B有两个以上的必胜点,那么B两步必胜。 3.如果B只有一个必胜点,那么A第一步肯定放在B的必胜点上。再判断A是否
2011-09-18 11:09:17
1021
原创 HDU 3723
天津区域赛题,首先可以观察到上升、下降位置的个数是一样的。假设有k对上升、下降的位置,那么这k对位置的合法组合数为Cat[k]。Cat为卡特兰数,这个组合问题等价于卡特兰数的经典应用括号化问题。设T[k]为n个位置中有k对上升、下降位置的组合数,这k对位置从n个位置中选出。所以T
2011-09-17 18:02:24
1485
原创 HDU 3720
没什么好说的,最近太水,各种犯2...#include #include #include #include #include #include #include #include #include #include #include #include
2011-09-16 17:50:49
903
原创 HDU 2464
N#include #include #include #include #include #include #include #include #include #include #include #include using namespace
2011-09-16 13:57:29
966
3
原创 PKU 3074
DLX数独建图:一共9*9*9 = 729行,9*9*4 = 324列。第i行表示数独的i/81行i/9%9列放置数字i%9。324列分成4个部分,每个部分81列,分别限制每个格子只能放一个数字、每行只能放一种数字、每列只能放一种数字、每个3*3的格子只能放一种数字。#inc
2011-09-10 10:23:06
773
原创 HDU 3944
原来剑哥讲组合数取模的时候说过Lucas定理,但是不是很明白。总之C(n,k)%p = C(n/p,k/p)*C(n%p,k%p)%p。这里要注意如果k>n, C(n,k)=0。C(n,k)%p可以通过求逆元的方法计算。不过C(n,k)%p = n!/(k!*(n-k)!)%p
2011-09-06 21:00:26
1086
原创 HDU 3908
显然O(n^3)的算法会超时。正确的解法是首先计算出与每个数互质的数的个数以及与每个数不互质的数的个数,分别记入数组co[]和nco[]。这样,假设一个三元组包含数字x(x,..,..)。那么包含x且不符合题意的三元组个数是co[x]*nco[x]。比如一组数字2,3,4,5,7
2011-09-05 09:56:09
657
原创 HDU 4003
#include #include #include #include #include #include #include #include #include #include #include #include #include using nam
2011-09-04 22:10:58
1689
原创 HDU 2474
这题关键是数据量太大,如果用普通的银行家算法,最坏情况下时间复杂度为O(N*N*M),显然会超时。正确的解法是对每种资源分别考虑,建立M个队列。进程对每种资源的需求数量从小到大存入队列,这样每次只需检查队列头部的进程即可。排序时间复杂度O(M*N*logN),每个进程至多出队M次
2011-08-25 12:50:13
1029
原创 SRM 500 DIV1 B
递归算法在几何计算上的应用...好题...#include #include #include #include #include #include #include #include #include #include #includ
2011-08-17 17:44:53
586
原创 HDU 3920
这题时间卡得太紧,状态DP不是随随便便能过。有一个优化,比如说:001111,110011,111100 -> 111111 其实效果都是一样的,所以每次状态转移时确保把第一个'0'变成'1'。现在不变,最终也要变,而且效果是一样的。这不过是个"迟早"的问题... 优化
2011-08-13 12:31:02
976
原创 HDU 3927
题意:构造一个N*N的矩阵,使得每行之和、每列之和、两个对角线上数字之和都不同。 解法:推出来的(http://w3.math.sinica.edu.tw/math_media/d164/16419.pdf)都不是好孩子,随机算法才是王道。在比赛的时候不可能有那么多时间
2011-08-12 10:55:41
1088
原创 TCHS07 Finals C
题意:给一棵无向图构成的树,要求删除一些边,再添加一些边。使得图中每个点直接和其它两个点相连并且保证所有点是连通的。求至少要经过几次操作才能满足题意,每次操作为删除一条边或者增加一条边。 解法:分析可得,要满足题意,那么最后生成的图肯定是所有点连成一个环。并且原图中保留
2011-08-12 09:35:27
523
原创 SRM 513 DIV1 C
http://apps.topcoder.com/wiki/display/tc/SRM+513 简化问题,x轴的移动对y轴z轴无影响,同样y轴z轴的移动对其它两个轴也是无影响的。所以问题的解就化简成三个子问题x轴上移动的最少步数、y轴上移动的最少步数和z轴上移动的最小
2011-08-11 11:32:08
725
原创 HDU 3911
线段树结点结构: bl,br,ba 分别表示包括左端点黑石子的连续长度,包括右端点黑石子的连续长度,区间中黑石子的最大连续长度 wl,wr,wa 分别表示包括左端点白石子的连续长度,包括右端点白石子的连续长度,区间中白石子的最大连续长度 ta 表示结
2011-08-09 20:39:52
1633
原创 CodeForces 103D
题意:给一个长度为n的数组,进行p次询问。每次询问输入两个数a,b,输出数组中第a位开始,每隔b位的所有数字之和。(1解法:刚看清题意,一直在考虑是不是有什么特殊的数据结构,可以把每次查询的时间复杂度降到O(logn)。但其实仔细分析可以发现如果b>=600,那每次查询最多只
2011-08-08 13:11:27
1071
原创 CodeForces 101D
题意:一个城堡中有N个大厅,它们由N-1条长廊连成一个树状结构。在除了编号为1的大厅中的N-1个大厅里有一个宝物,宝物在这N-1个大厅中的概率相等。Gerald起始在1号大厅,他不知道宝物在哪个大厅。他要找出一条路径,使得他找到宝物所花时间的期望最小。#include #i
2011-08-04 20:33:08
676
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人