poj
文章平均质量分 76
流沙-岁月
这个作者很懒,什么都没留下…
展开
-
poj 3461
kmp的模板题,因为这次借zhe原创 2014-11-01 10:59:41 · 426 阅读 · 0 评论 -
poj 1077(8数码)
8数码,又称九宫格,应该是大家都玩过的一种游戏。在一个3*3的棋盘上放有8个棋子,棋子可以上下左右移动,要求通过移动棋子,使棋盘从一种状态转换为另一种状态。 首先,明显地,这是一个搜索问题,共有9!种状态,并不算多,使用普通BFS或双向BFS就能解决,其次,为了保存状态,可以使用康托展开,这样能减省许多空间。 普通BFS在状态空间搜索时,搜索了许多无用的状态,导致了时间的浪费,原创 2015-03-17 08:28:56 · 351 阅读 · 0 评论 -
poj 2689(区间素数筛选)
由于给出的L和U太大,直接打表是不可能了。但U-L代码如下:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LL long原创 2015-03-24 18:32:07 · 533 阅读 · 0 评论 -
poj 3126
给出两个四位的素数,要求对第一个素数进行一系列操作,每次操作只能改变一位数,且改变后必须仍然是素数,求最少的操作步数。 水题。 搜索加素数判定。普通的bfs就能过了,可悲的是我还刚开始还想用启发式搜索,结果算出来的不是最少步数,于是改成bfs过来。。。。#include #include #include #include #include #include #incl原创 2015-03-24 20:58:41 · 438 阅读 · 0 评论 -
poj 1095 catalan and binary tree
考查catalan数和递归。 1、首先要知道第n棵二叉树有几个节点。设catalan数为h(x),则h(x)可以表示x个节点的二叉树总共有多少种。若第n棵二叉树有x个节点,有n 2、接下来是递归建树,如何知道二叉树的形态呢?假设二叉树的根节点无左子树,那么必有:1 代码如下:#include #include #include #incl原创 2015-04-04 15:23:09 · 411 阅读 · 0 评论 -
poj 3292
筛法打表,如此而已。 代码如下:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LL long lo原创 2015-04-05 15:37:50 · 356 阅读 · 0 评论 -
poj 3009 (dfs)
简单深搜题。#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LL long long#define ULL原创 2015-04-14 17:35:14 · 370 阅读 · 0 评论 -
poj 1328 greedy
区间贪心,水题,将能扫描到小岛的雷达区间全部求出后排序,求最少互不相交的集合数。 代码如下: #include #include #include #include #include #include #include #include #include #include #include #include #include #include #in原创 2015-05-04 19:07:56 · 444 阅读 · 0 评论 -
poj 3187 (康托逆展开)
利用康托逆展开得到从1至n的全排列,然后验证是否为答案即可,水题。 代码如下:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #i原创 2015-05-01 17:10:17 · 429 阅读 · 0 评论 -
poj 3320 尺取法
题意:给一个包含n个数的数组,数组中元素可重复,求一个最短的连续子区间,该区间满足整个数组中所有元素至少在其中至少出现一次。 分析:这也是一道求满足条件的最短区间的问题,并且是可以通过不断推进区间两端点来解决,即区间[s,t]若满足条件,那么对另一个满足条件的区间[s+1,t'],必有t'>=t。对该题而言,若从s页读到t页能覆盖所有知识点,那么当从s+1页开始读到t页的过程中,s原创 2015-05-30 17:54:24 · 373 阅读 · 0 评论 -
poj 3061 尺取法
反复推进区间的开头和结尾,来求取满足条件的最小区间的方法称为尺取法。 代码如下:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #原创 2015-05-30 16:20:13 · 350 阅读 · 0 评论 -
poj 3276
思路其实很简单,为了使所有牛都朝向前方,从左到右扫描每个牛,若这个牛朝后,则以这个牛为起点进行翻转,而翻转的区间长度从1到n进行枚举,从合法解中选取最小的就行了。那么为什么这样解是对的呢?首先,一个区间进行两次或两次以上翻转是没有意义的;其次,若得到解要对一些区间进行翻转,那么对这些区间的翻转顺序是不影响解的。因此问题就转变为求满足解的最小区间集合。 但如果真按着上面的思路写,枚举长原创 2015-06-01 09:04:24 · 559 阅读 · 0 评论 -
poj 3252 数位DP
题意:给出一段区间[x,y],求其中roundnumber数的个数,roundnumber是指化为二进制后,0的个数大于等于1的个数的数。 可以用组合数学过,也可以用数位DP,不难,但还是做了好久,心情极度郁闷。。。。 先说说怎么用组合数学做,由于count(x,y)=count(0,y)-count(0,x),只要求出count(0,n)就行了。以1100为例,先求出原创 2015-05-25 20:14:41 · 455 阅读 · 0 评论 -
poj 2774
求两个串的最长公共子串,后缀数组水题,直接贴代码了。 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define L原创 2015-09-05 16:26:34 · 366 阅读 · 0 评论 -
poj 3421
质因子分解加排列组合。 将一个整数分解成质因子连乘的形式,其项数是最多的。如:100=2*2*5*5,so the maximum length of X-factor chains is 4。#include #include #include #include #include #include #include #include #include #i原创 2015-03-28 11:38:11 · 571 阅读 · 0 评论 -
poj 2983 (差分约束系统)
题目就是给你一组由等式和不等式组成的式子,让你判断这组式子是否有解。为了使用差分约束系统,将等式a-b=c转化为a-b>=c和a-b 代码如下:#include #include #include #include #include #include #include #include #include #include #include #include原创 2015-03-07 19:07:36 · 404 阅读 · 0 评论 -
poj 1201 (差分约束系统)
题意:给你n条线段,形如a b c,代表起点,终点以及最少从线段上取多少个点,问你在满足所有约束条件下最多能从所有线段上取多少个点。 分析:为了构造约束条件,首先想象有一个源点,d[x]就表示从源点到x点这个范围内取的点数,于是对每一条线段a b c,有d[b]-d[a]>=c,但后来发现这样不行,例如有1 3 3,3 5 2,按前面的构造方法求出来的解是5,但正确的解应该是4,因为原创 2015-03-07 16:58:58 · 598 阅读 · 0 评论 -
poj 1724(优先队列+Dij)
题意:k点点数,n个点,m条边,每条边有权值以及通过时会消耗的点数,求在消耗点数不超过k点的情况下,从1到n的最短路径。 分析:显然是一个最短路的变形,而且是一种常见的模型。最短路本身是一个求解最优解的问题,在这里加多了一个限制条件,就是点数,所以变为“在一定的限制条件下求解一个最优化问题”的模型,这样的模型,有一个大致的套路:在满足限制条件后,再进行更新。 求解方法有很原创 2014-12-21 11:07:49 · 760 阅读 · 0 评论 -
poj 1753(位压缩+搜索)
题意:有一个4*4的方格,每个方格中放一粒棋子,这个棋子一面是白色,一面是黑色。游戏规则为每次任选16颗中的一颗,把选中的这颗以及它四周的棋子一并反过来,当所有的棋子都是同一个颜色朝上时,游戏就完成了。现在给定一个初始状态,要求输出能够完成游戏所需翻转的最小次数,如果初始状态已经达到要求输出0。如果不可能完成游戏,输出Impossible。 分析:看完这道题,一种很直观的想法就是,对原创 2015-01-12 08:48:15 · 452 阅读 · 0 评论 -
poj 2965
这道题可以用搜索做,不过有一种更为简单巧妙的方法,在网上看了大神的介绍才知道的。 1,有一点容易明白,一个位置改变了偶数次的话,状态是不变的,改变了奇数次的话,状态才和原来的相反。 2,现在考虑如何把一个位置的‘+’变成‘-’ ,而让其它位置不变?可以先以该位置做一次题目中的翻转,再让该行和该列的每一个元素做一次题目中的翻转,可以发现,'+'号的位置做了9次改变,而该行该列原创 2015-01-13 14:29:41 · 347 阅读 · 0 评论 -
poj1274
题意:农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术。不幸的是,由于工程问题,每个牛栏都不一样。第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们喜欢的那些牛栏中产奶。上个星期,农夫约翰刚刚收集到了奶牛们的爱好的信息(每头奶牛喜欢在哪些牛栏产奶)。一个牛栏只能容纳一头奶牛,当然,一头奶牛只能在一个牛栏中产奶。 输入:第一行 两个整原创 2014-12-23 19:02:34 · 395 阅读 · 0 评论 -
poj 1325(最小点覆盖集)
题意:有两台机器A和B,A有n种工作模式,包括模式0,1....n-1,B有m种工作模式,包括模式0,1....m-1。 有k项工作,对每项工作,可选择用A的i模式完成,或用B的j模式完成。但机器每切换一种模式都需要重启一次。求完成全部工作所需的最少重启次数。 分析:明显的,两台机器切换模式的次数就等于重启次数,因此为了减少模式的切换次数,每次应该选择能完成最多工作的模式。接下来,原创 2014-12-23 20:35:40 · 424 阅读 · 0 评论 -
poj 1281(简单模拟题)
题意:进程模拟。设有一个容器,对这个容器有下面四种操作: a x:将一个花费为x的进程放入容器; r:根据manager policy 取出花费最大还是最小的进程; p i:修改manager policy ,i只有两种取值,即1和2; e:结束模拟。原创 2014-12-24 17:21:35 · 899 阅读 · 1 评论 -
poj 3069
简单的贪心问题,直接上代码了。#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LL long long#define ULL原创 2015-01-15 16:00:11 · 455 阅读 · 0 评论 -
hdu 1852
考验智商和想象力的题。。。 两只蚂蚁相遇后掉头等价于这两只蚂蚁穿过了彼此继续前行。 代码如下:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #inc原创 2015-01-15 13:05:42 · 446 阅读 · 0 评论 -
poj 2559(单调栈)
题意:给出了一个矩形图,求出最大的长方形面积。 如果确定长方形的左端点L和右端点R,那么最大可能的高度就是min(hi|L 考虑一个面积最大的长方形,它的左端点是L,右端点是R,高度是H,那么必有h(L-1)i且h(j) 明确L(i)和R(i)的含义后,用单调栈就可以高效的求得。所求最大面积就是max(h(i)*(R(i)-L(i)))。代码如下:原创 2015-01-15 10:58:10 · 383 阅读 · 0 评论 -
poj 3255(次短路)
题意:给出n个点,m条边,求从顶点1到顶点n的次短路。 分析:首先可以知道,次短路应是在最短路的某个顶点处绕了出去,然后又回到最短路的某个顶点,而且只会绕一次(绕多次的距离肯定比绕一次的大)。再考虑次短路上的两个相邻点i和j,用d1[i]表示从源点1到i的最短距离,用d2[j]表示从j到汇点n的最短距离,那么当i和j在次短路与最短路重合的部分(即没绕出去的那部分),d[i]+w[i]原创 2015-01-18 13:41:20 · 378 阅读 · 0 评论 -
poj2823(单调队列)
题意:给定n和k,并在下一行给出n个数字,要求一行输出从左到右,每个长度为k 的区间的最大值,下一行则输出最小值。 分析:线段树和单调队列皆可求解,我用的是单调队列。 首先,什么事单调队列?其实就是指队中元素单调递增或递减的队列。为了维护这一性质,单调队列在压入元素时,若加入的元素会破坏队列的单调性,则将队尾元素删除,直到元素压入队尾后队列仍符合单调性。因原创 2015-01-05 16:07:02 · 382 阅读 · 0 评论 -
poj 3723(最大权森林)
题意:要招募n个男兵和m个女兵,而每招募一个人都要花费10000,这可是笔大开销,还好,可以用男女之间的关系减少费用,因为当招募一个士兵时,如果已招的人里与其有t点关系,则只需10000-n的费用。 给出r对关系,求出最少费用。 分析:当招募b时,若用了b与a 的关系,则在a和b之间连一条边,很明显,当全部招募后,会连出一个森林,这个森林的总权值就是原创 2015-03-01 14:03:23 · 813 阅读 · 0 评论 -
poj 2243(a*)
题意:给你一个8*8的国际象棋棋盘,然后在给你两个初末位置,问你按骑士的走法,最少几步内能从初位置走到末位置。 分析:简单的一个搜索题,为了练a*算法找来水一水。估价函数用曼哈顿距离就行了。 代码如下;#include #include #include #include #include #include #include #include #inc原创 2015-03-08 20:25:28 · 448 阅读 · 0 评论 -
poj 3415
题意:求两个串的长度不小于k的公共子串数量。 分析:首先,将两个串分别称为A串和B串,简单的做法是将B串放到A串后面,当然,中间要加一个用于分隔的字符,找一个比所有字母都大的就行了。接着求后缀数组,而容易知道,lcp(rank[i],rank[j])-k+1代表以i开头的A串后缀和以j开头B串后缀所能贡献的子串数量,这样,只要枚举i,j就能得到答案,但这样是O(n^2)的时间,显然原创 2015-09-05 15:29:23 · 448 阅读 · 0 评论