自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (1)
  • 收藏
  • 关注

原创 poj3074 poj3076 数独问题 dancing links

当初学习dancing links的最大目的就是为了解决数独的问题吧,但是经过这两天的学习之后发现dancing links的功能远不止于此,看来是得多挖掘一下。当然本文还是介绍解数独的做法。首先,需要把数度问题转化为一个最小覆盖问题:1、每个空格最终都会填上一个数,而且有1,2,3,4,5,6,7,8,9这九种可能(介绍3*3的,其他大小的同理),我们可以把每个空格中填写的数字情况看

2013-08-02 20:04:03 1019

原创 zoj 3209 Treasure Map 最小覆盖问题 dancing links

这是练手的一道dancing links题,直接套用上篇博文那题的代码即可,不过得把问题稍微转化以下。地图是个m行n列的地图,即有n*m个小块,共有p个图片去覆盖,那么我们只要找出每个小块和p个图片的关系,构造一个p行n*m列的矩阵,那么第j行第j列表示,j对应的那个小块能被图片i覆盖剩下的问题,就是如何选出最少的行数使得每列被覆盖即可(可以参见上一篇文章 http://blog.cs

2013-08-02 11:43:13 973

原创 hust 1017 Exact cover 最小覆盖问题 dancing links

虽然已经退役,但是还是希望能够补一补自己不会的东西,昨天学习了dancing links(舞蹈链),然后做了这个入门级的水题,前后代码重写了好几次,现在算是自己理解了dancing links。言归正传。这道题的意思是,从一个01矩阵中选出若干个行,使得这些行组成的矩阵满足恰好每列有且仅有一个1,换句话说,有这些行,恰好可以覆盖每个列解题思路如下:1、选出一个列c,然后找能够覆

2013-08-02 10:19:47 1197

原创 ios 渐进色绘制 CGGradient(一)

开始要做实验室的项目了,所以得好好学下ios的东西,今天重新看了渐进色的绘制。ios中绘制渐进色有两种方案,一种是用CGCradient对象,另一种是CGShading,对于后面这种,可以通过自己写回调函数来设定渐进色的变化规则,因此更加具有主观能动性,当然,用CGGradient则是系统自己会帮你算,相对简单些,这里只介绍CGGradient,因为不会用CGCradient……本文介绍轴

2013-05-16 23:23:59 2746

原创 java(JNI)调用c/c++动态链接库 linux

已经半年没有更新博客了,今天终于找到了可以写的东西,虽然这种东西写过的大神已经很多了,我只是新瓶装旧酒而已。写点自己的感悟和大家分享,也帮助自己加深记忆。         OK~言归正传,相信很多童鞋肯定和我一样喜欢用c++处理一些算法问题,但是有时候应用是java写的,这个时候就非常希望能够在java代码里调用c++的模块了。感谢JNI的存在~         下面,就介绍JNI的使用,

2013-03-03 21:09:52 1233

原创 struts2入门 eclipse 配置 编写 struct2 登录程序

其实上学期就学过javaee了,不过说来惭愧,一直都没怎么听课,所以现在重新去学习下,并且通过写博客来加深自己对知识的掌握。      本文适合初学者……使用的jdk版本为jdk6,eclipse版本为javaee版(用myeclipse的读者也差不多)      准备工作:      1、安装javaee版 eclipse   下载地址:http://www.eclipse.org/

2012-09-02 14:37:45 4849 2

原创 hdu 1007 zoj 2107 Quoit Design 求平面最近点对 分治法

本题题目很裸,只要求出平面中最近点对的距离,然后除以2就是答案,方法就是分治,具体的可以参见算法导论简单分析:对于该问题的一个子问题,只需把当前点的集合再分成两部分,分的方法是:按照x(或者y)排序,然后分成了前一半和后一半,即相当于在这些点的中间做了一条垂线,然后算垂线左边的最近点对(设距离为d1),垂线右边的最近点对(设距离为d2),那么在当前情况下,最近点对可能出自左半部分的子问题,也可

2012-08-13 23:50:28 1931 2

原创 iphone4 白苹果解决方法 刷机+越狱

今天不小心把实验室的iphone搞成白苹果了,于是只好重新刷机越狱了一、首先我们得下载一个itunes,装完之后不幸的发现iphone连不上(可能是我人品太差了),作为没怎么用过iphone的屌丝,只好网上搜解决方案,最后找到合适的方案让iphone连上itunes:1、在iphone开机状态(也就是白苹果),同时按住power和home键直到屏幕变黑2、放开power,但是还得按着h

2012-08-11 21:28:55 7300

原创 poj 1151 hdu 1542 hoj1119 Atlantis 线段树扫描线求矩形面积并

终于做到了这部分,以前看到这种类型的题只能直接放弃的,现在终于AC了第一个这种题因为坐标都是浮点数,所以需要对坐标进行离散化(需要插入线段树的坐标进行离散化),为了方便,我直接用了map     将每个矩形的上下两条水平边存到数组中(得记录这条边是下边还是上边,为了计算覆盖次数,下边记为1,上边记为-1),按y的大小排序;从y最小的边开始向上扫描,首先将一条边插入线段树,然后得到当前当前扫

2012-08-05 21:21:35 1996

原创 hdu3397 Sequence operation 线段树区间合并

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3397题意:一个0,1序列,有三种操作方式:1、把某子区间置为0;2、把某子区间置为1;3、把某子区间0,1置反;有两种询问:1、某子区间中1的个数;2、某子区间连续的1的个数最长是多少对于第一种询问,就是普通的区间查询,第二种是一个区间合并的过程,可能是左子区间,右子区间或者中间合并一下

2012-08-04 15:44:20 723

原创 hdu 3308 LCIS 最大连续递增字串长 线段树区间合并

这是我做的第二个线段树区间合并的问题,之前那个hotel还是借助大神的报告来写的,这个总算是独立自主的完成这个问题是单点更新,所以不用写push_down,延迟标记……一个状态记录的是struct point{ int l,r,lmax,lmin,rmax,rmin,max;}p[MAXl:区间最左边开始的最大连续递增字串长r:区间最右边开始的最大连续递增字串长lm

2012-08-03 19:11:50 1004

原创 poj 3667 Hotel 线段树区间合并

题目链接:http://poj.org/problem?id=3667题意:很多群人去住宾馆,他们想尽可能住在连在一起的房间,每次安排房间的时候,如果有连续足够多的房间,则从房间号最小的开始安排,输出这个房间号,如果没有连续的那么多的房间,那么输出0,而这些人分开住,但是也是尽可能连续,房间号尽可能小……然后有人离开宾馆,也是一个区间的人都离开……终于做到了线段树区间合并系列,刚开始看了这

2012-08-03 15:41:46 1549 1

原创 poj2991 Crane 线段树+计算几何

因为种种原因,学习线段树的事情被耽搁了,直到今天才又开始处理,晚上的时候做掉了这道略微恶心的题,当然也是参考过不少大神的解题报告的这题题意是,给你n个杆子,连在一起,刚开始在y轴上,每次变化第s和s+1杆子之间的夹角(当然后面的所有杆子都会跟真转动),然后输出第n条杆子的那个端点的坐标……因为后面的杆子是跟着动的,所以他们整体上的变化的角度都是一样的,这就变成了区间更新的线段树了,查询很简

2012-08-02 21:53:44 1656

原创 poj 2985 The k-th Largest Group 并查集+树状数组求第k大

题意大概是:两种操作,合并集合,求元素第k多的集合有多少个元素集合的合并就用并查集,同时维护一个数组tol表示该集合中的元素个数树状数组,存值为i的个数,sum(i)表示值小于等于i的个数树状数组求第k大,用二分法即可#include #include const int MAX = 200010;int b[MAX];int a[MAX],tol[MAX];int n,

2012-08-01 21:49:40 1325

原创 poj 2155 matrix 二维树状数组反应用

题目链接:http://poj.org/problem?id=2155题意,对于一个平面网格中,起始时所有单元格数值为0;一共两种操作,一种是对范围(x1,y1)到(x2,y2)组成的矩阵中的所有值01反转,一个是询问某个单元格的01值分析:这个题可以利用二维梳妆数组来解,不过得反过来用,sum(x,y)表示某个单元格的被操作的次数……这里可以根据奇偶性来判断最后的01值,所以只要%2即可

2012-08-01 11:04:24 583

原创 hdu 4325 Flowers 2012多校1006题 树状数组解法

这题一看就是区间更新单点查询,比较裸的线段树……当时敲的时候手残了,没敲好,后来队友用树状数组过的……今天我也写了一个树状数组,不过不知道为什么效率不佳,得300+ms才过,可能我离散化写的有问题,写了两个版本的,一个是用stl的,一个没有……离散化我一直都不是太清楚怎么写,自己yy了一个…………这题用树状数组写的时候其实是树状数组反过来用,sum(x)表示查询x处话的数量,而更新区间则是用两

2012-08-01 10:33:03 747

原创 hdu 4323 Magic Number 2012多校训练第三场1004题 BK树

今天下午进行了第三场的多校,表示被虐成了狗……1004题当时感觉想暴力,毛估复杂度是1000*1500*10*10……这还是单case的,所以一直没敢敲……直到最后发现全场几十支队伍都过了,开始敲……结果没想清楚最终WA到死晚上的时候回基地写了个暴力解法,375ms过了,感觉时间卡的也不紧……需要稍作优化,两个字符串长度之差大于要求的编辑距离时就不用再去dp了,dp的状态转移和求最长公共子

2012-07-31 20:58:16 979

原创 poj1111 hoj 1639 Image Perimeters 简单搜索

这个题就是就求图中的x组成的图形的周长(会告诉你从哪个点开始搜),每个格子跟周围八个是相邻的我用了bfs,在搜的过程中,统计某个格子上下左右四个格子中值为” . “的个数,求和就是答案代码如下:#include #include #include using namespace std;int move[8][2] = {{1,0},{-1,0},{0,-1},{0,1},{1

2012-07-30 12:29:04 581

原创 poj 1436 Horizontally Visible Segments 线段树求垂直三角形的个数

题目链接:http://poj.org/problem?id=1436题意:三条垂直线如果能两两用水平线相连,且该水平线不被和其他的垂直线相交,则这三条垂直线成为垂直三角形,然后给你一些线段,数据有y的坐标范围和x的坐标,求所有这些线能够成的垂直三角形的个数分析:用线段树解决,根据线段x坐标从小到大插入的线段树中,每次插入前先查询这个线段能够看见的线段,把这些线段的id存到这条新要

2012-07-29 15:54:39 757

原创 poj 2197 hoj 2027 Jill's Tour Paths 搜索

题意就是一个人去旅游,不能重复经过同一个城市,且走的路的距离有限制,求所有符合条件的能从起点走到终点的路径,按照距离从小到大输出,如果距离相等,就按照路径的字典升序输出这题主要麻烦在输出上,得有路径,而且还得各种顺序……我分别用深搜和广搜做了这题,不过广搜写残了,效率和空间远不及深搜深搜的时候,保存当前的路长和路径信息,不断往下找,注意剪枝,就是长度超过限制,搜到重点之后先把结果放进vec

2012-07-28 14:00:08 1475

原创 hdu 4158 hoj 2581 Go 简单搜索

这是一个简单搜索题,思想是floodfill的思想扫描整张图,找到一个空白点时开始搜索,不断累加空白点数,用变量flag来保存他被什么颜色的子围着(状态压缩),当遇到棋子的时候,判断flag变量是否已经被更新过,如果没有更新过,说明之前不知道这部分空白被什么颜色的棋子围住了,所以对flag直接更新即可,如果flag非0,即被更新过,则判断当前碰到的颜色的子和我之前碰到的是否相同,用位运算&即可

2012-07-28 09:53:53 794

原创 hdu1455 poj1011 hoj1049 Sticks 深搜+剪枝

由于明天要给大一的同学讲搜索,所以临时放下了线段树,刷几个搜索题,结果这个题就从早上卡我到现在。题意就是将一些值分成若干份求和使得他们的和相等,求出最小的能满足条件的和这道题的关键之处在于剪枝:1、这个和肯定整除所有数的总和,且这个和最小就是这些数中的最大值,所以枚举和的时候可以先剪枝2、搜的过程中,如果当前的和加上剩下所有的和小于目标和,则直接返回03、当前和与目标和的差小于

2012-07-27 15:38:04 2118

原创 poj 3225 Help with Intervals 线段树 集合的交并差补运算

这道题感觉比之前的麻烦了很多,而且比较综合首先,如何简单处理开区间和闭区间的问题?我是看了notonlysuccess大神的方法才知道的将所有的数字乘以2,奇数表示开区间,偶数表示闭区间,如原来的[2,4]在线段树中则是(4,8),原来的(1,3)在线段树中是(3,5),要注意的是,如果是左开区间,则左端点的表示是该数乘以2+1,若为右开区间,则是乘以2减1,(1,3)对应(3,5)就是这

2012-07-25 20:28:33 1350 8

原创 poj 2528 Mayor's posters 线段树+离散化 区间更新

线段树第三天,结果就这么个题重写了两遍才过首先,题目中说的墙的长度是10000000,如果用这个长度建线段树,一定是超内存的,所以需要离散化,具体的就是对输入的点的坐标进行排序,然后算出他们分别是第几小,用这个第几大去替换原来的值就好,如 1,5,8 可以替换成1,2,3因为线段(1,5)和(1,8)的关系与(1,2)(1,3)其实是一样的离散化之后,那么线段树的长度最多就是2*n 了

2012-07-25 11:08:26 1476

原创 poj 3468 A Simple Problem with Integers 线段树 区间更新求和

线段树第二天,下午由于做了多校的第一场virtual judge,所以直到晚上才有时间来搞这道题除了早上做的那个区间染色的问题,这个问题应该也是个入门题,当然由于鄙人智商是硬伤,没太反应明白,查了解题报告,再加上自己的一些尝试,最终侥幸AC了,下面说说思路:首先,更新区间的时候不可能更新区间里的每一个点,这样复杂度太高因此,在update的时候,找到对应的区间之后,直接给该区间存储一个

2012-07-24 22:37:18 626

原创 HDU 1698 Just a Hook 线段树区间更新

经过昨天六个单点更新线段树水题的洗礼,今天上手快了很多。这道题也是一个线段树的一个入门题这个题是对一个区间段内的数进行整体的更新,如果对区间的更新还是最终落实到对点的更新,显然复杂度是很高的,因此在处理上需要换一种方式这次,线段树节点存的内容是其左右子树的颜色信息,如果左右子树颜色相同,那么他的值就是左右子树的颜色值,如果不同,则标记为-1本题的重心在于update时的处理,如果(L=

2012-07-24 09:10:54 729

原创 POJ 2886 线段树对约瑟夫问题的模拟

这个问题其实就是对约瑟夫问题的模拟,单纯的暴力模拟肯定是会超时的,用线段树来优化,只要算出当前要走的人在当前的数组中是第几个人就可以了刚开始的时候没怎么弄明白,后来看了人家的分析之后才茅塞顿开如果当前走的是第k个人,他报的数是m,那么下一个要走的人就是 k-1+m(当然还得取模)。为什么是这样呢,k走了之后,其实k之后的人相当于都向前挪了一个位置,所以需要减一个1. 在取完模以后,算得的结

2012-07-23 22:22:17 831

原创 HDU 2795 Billboard 线段树

这个题也是网上看过别人的报告才有了思路应该是对h进行区间划分,当然h的值可能很大,所以得想到,n个广告最多n行,而(n树节点维护的信息就是该区间内所有行中还剩下的能贴广告的最大宽度值在每次新贴一张广告进去,即update的时候,先判断左字数的最大宽度值能否满足这个广告的宽度,行的话就向左往下搜,不行的话判断右子树,行的话往下搜,不行就说明这个广告已经没法贴了如果可以贴广告,则对贴的

2012-07-23 17:10:20 509

原创 HDU 1394 Minimum Inversion Number 线段树求逆序数

此题最主要的部分还是把初始情况下的逆序数算出来,可以用线段树,当然也可以用树状数组……下面的代码是线段树的做法本题中得知道一个事情:把一个数x从数组头部放到尾部,整个数组的逆序数变化量为n-x-(x-1)  (前提是数组就是1~n,当然对于别的情况,可以先对那些数字哈希一下,最终替换成1~n来做即可)  x从队首放到队尾,则逆序数的增加量为n-x因为后面的书中比x大的有n-x个,同理减少的量为

2012-07-23 15:45:13 736

原创 HDU 1754 I Hate It 线段树区间求最大

这道题的就是每次询问一个区间,找出区间中的最大值依然是线段树做法sum数组就是线段树的节点,存的是它代表的区间中最大的值,更新一个节点的时候只要push_up一下就好了#include #include const int MAX = 200010;int sum[MAX<<2];template T max(T a,T b){ return (a>b)?a:b

2012-07-23 14:55:11 478

原创 poj 2828 Buy Tickets 线段树

这题也是用线段树来解,惭愧的说没在网上找过资料前真没想到这是用线段树做的刚开始以为是直接把值往里添然后统计之前已经添过的人的数量,当然这个显然是错误的。后来也是在看了别人的文章之后有了想法。1、最后来插队的那个人直接能确定他的最终位置2、从最后的人开始枚举,反过来去考虑整个插队的过程,如果一个人要插在第i个人的后面,那么也就说在他之前应当i个人,而当前已经插入到树中的人其实是在他之

2012-07-23 14:16:51 462

原创 AC的第一个线段树 HDU1166 敌兵布阵

为了解决自己一直烦恼的数据结构的短板,今天开始从线段树入手……这也是发表的第一篇博客。这个题是最基本的入门线段树,sum数组里存的是一个区间内敌军的数量,push_up是根据子节点的情况更新父节点的值线段树可以看成是完全二叉树(可能有些节点下没了子节点破坏了整体的结构,但是在数组的处理时,还是可以当做完全二叉树,因此rt的左儿子就是rtnotonlysuccess的线段树完整版之后才知道能

2012-07-23 12:32:43 1243

编写struts2需要的几个jar包

struts2需要的几个jar包: 1)xwork-core-2.1.6 2)struts2-core-2.1.8 3)ognl-2.7.3 4)freemarker-2.3.15 5)commons-io-1.3.2 6)commons-fileupload-1.2.1

2012-09-02

空空如也

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

TA关注的人

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