
poj
文章平均质量分 56
pandening
我很笨,但我很勤劳!
展开
-
poj 2386 Lake counting
只需要用到DFS就行了,算搜索中比较直接的,前面也写过一体类似的,DFS和BFS只是一种策略,只是搜索。 #includeusing namespace std;int N, M;char maze[101][101];void dfs(int x, int y){ //将现在所在的位置替换为‘.’ maze[x][y] = '.'; //循环遍历可以移动的八个方向原创 2015-03-30 21:48:53 · 397 阅读 · 0 评论 -
poj 2752
题意为:给一个字符串,找出又是前缀又是后缀的子字符串的长度,从小到大输出。解法:利用kmp中的next数组来求解这个问题就很简单了。首先,我们应该理解kmp算法中的next数组含义:当失去匹配之后,只需要回退一些,不需要从0开始。也就是对于一个下标j,next[j]的值代表回退过去的位置,next[j]之前的字符串已经匹配成功过。所以不需要再次匹配那对于这道题来说,原创 2016-05-22 17:15:01 · 383 阅读 · 0 评论 -
poj 3461
本题求解的是说输入两个字符串,求第一个字符串在第二个字符串中出现的次数。直观理解就好,用kmp算法很好实现,只要稍微改一下标准kmp算法就可以。首先,next数据求解还是一样,在kmp进行过程中,如果第一个字符串不是第二个字符串的子字符串,那么没什么问题,答案是0.如果第一个字符串是第二个字符串的子字符串,而且只出现一次,那也可以直接用kmp实现,不需要修改,答案是1。但是,当第一原创 2016-05-22 16:02:54 · 459 阅读 · 0 评论 -
poj 2542
题意:给定多组(x,y),x和y的信仰相同,估计信仰的数量 解法:并查集,初始化ans为总人数,当添加一对(x,y)后,判断,如果已经是一组了,不做,如果不是,ans-1.#include #include #include /* *This file is about union set operations. *and the program原创 2016-05-26 14:49:30 · 666 阅读 · 0 评论 -
poj 1611
题意:输入n,m分别表示学生人数和组数,然后输入m组数据,现在已经知道如果一个小组里面的一个人得病,那么该小组都有可能得病。而且已经知道0号学生已经得病,问:一共有多少人可能得病? 解法:并查集 用树高代表集合的大小,最后输出根为0的小组的人数就可以了!#include #include#define max_n 30005int father[m原创 2016-05-26 14:33:35 · 544 阅读 · 0 评论 -
POJ 1251
这道题就是对优先队列的应用。 huffman+priority_queue #include #include #include #include #include #include #include #include using namespace std;int main(){ string in; int count[200]; //原创 2016-05-24 16:41:53 · 427 阅读 · 0 评论 -
poj 2431
题意:这道题要求的是最少的加油次数,告诉你n个加油站的距离和每个加油站可以加的油。让你求能不能到达终点,如果可以的话最少需要加多少油。 解法:这可以用优先队列来解决。我们想象,当经过一个加油站时,我们不一定加油,但是我们一定可以加油。因为我们到达了这个加油站,所以相应的获得了可以加油的权利,但是我们可以不加,当我们足以行驶到下一个加油站时,我们就可以选择不加,但是当我们无法行驶到下原创 2016-05-24 16:02:48 · 473 阅读 · 0 评论 -
poj 3253 fence repair
/* poj 3253 fence repair 题意是说有一个人想要修东西,需要去将一根木头砍成N 段长度指定的木头,现在给定这根木头需要的长度集合 问最少花费是多少 算法设计:贪心的去选择较短的合成,每次都选择最短的两条 最后合成一根木头,也就是还原成原来的总长度*/#include#include#includeusing namespac原创 2015-04-02 22:50:43 · 526 阅读 · 0 评论 -
poj 3069
/* 直线上有N个点,点x的位置是xi(距最左端),现在要加上标记 对于每个点,要求是在一个为R的圆的范围内需要一个点被标记 问最少需要标记多少个点 算法设计: 贪心算法设计 从左端第一点开始,距离其最远的不超过R的那个点加上标记,然后将那个 被标记的点当作第一个点,向后找那个距离其最远的不超过R的那个点,然后 加上标记,一直这样做下去直到覆盖原创 2015-04-02 22:38:11 · 592 阅读 · 0 评论 -
poj 3617
/* poj 3617 best cow line 题意为给定长度为N的字符串S,需要构造出长度为N的字符串T,开始的时候T是一个空串 随后只能反复从S的开始或者结尾的地方取一个字符接到T的末尾,要求是根据这个规则 构造出字典序尽可能小的字符串T 算法设计:每次都比较末尾和开头的字符,如果不想等,则选择字典序较小的那个字符 接到T的末尾,这样构造出来的原创 2015-04-02 22:18:12 · 767 阅读 · 1 评论 -
poj 1979 DFS
DFS就可以解决,只要想到要向四个方向搜索就可以解决了,很多写法,最直白的就是不断判断,然后判断....注意:特别注意输入的两个变量,全程小心!!!! #include#includeusing namespace std;int n, m,ans;char maze[21][21];bool vised[21][21];//查找从(x,y)开始的可以移动的黑点的数量原创 2015-03-30 22:49:51 · 532 阅读 · 0 评论 -
DC poj 1064 Cable master
题意是说有N条绳子,长度分别为Li,现在要从这N条绳子中产生K条长度相同的绳子,求这个最长长度。算法是二分查找值算法,用一个函数C(x)判断是不是满足某种约定,然后根据判断结果不断更新这个区间,最后得到这个最长长度,用二分法的话思想很简单,实现起来很容易。 #include#include#define INF 9999999using namespace std;i翻译 2015-03-29 22:21:16 · 446 阅读 · 0 评论 -
poj 2456 Aggressive cows
题意是说有N间小屋,M头牛,现在要将M头牛关在N间小屋里面,(N>=M),因为牛对自己的房屋不是很满意,所以会将对房屋的不满转向同伴,会以攻击身边的同伴来解气,为此,为了让它们不要互相伤害,需要将M头牛适当的安排在这N间房屋里面,首先将第一头牛关在0号房间,而后不断更新这个最大可以安排的距离(d),用到二分查找值的算法,不断二分直到不满足C(d),这是结束运行,得到结果。翻译 2015-03-29 22:16:03 · 538 阅读 · 0 评论 -
poj 2406
题意:找一个字符串中的循环字符串次数比如:ababab循环字符串为ab,次数为3又比如:abcab的循环节为abcab,次数为1解法:用kmp数组,kmp数组的含有是当不匹配时可以直接回退到next[j],我们求完next数组之后。用 length%(length-next(length))判断是否具有循环节(自身其实也是一个循环节),如果可以整除,则说明该字符串是由l原创 2016-05-22 17:39:14 · 374 阅读 · 0 评论