上一页 1 ··· 8 9 10 11 12 13 14 15 下一页
摘要: 把一个长为len的字符串围成一个圈,然后以任意一个字符作为起点,都会产生一个新的长为len的字符串,字符串的最小表示就是所有新字符串中字典序最小的那个。 下面这个函数就是解决这个问题的,返回值为字典序最小的串的在原串中的起始位置。 int MinimumRepresentation(char *s, 阅读全文
posted @ 2013-02-27 21:24 Mr. Ant 阅读(634) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1828题目大意: 给你多个矩形,求他们合并和的周长,被覆盖的边不能算进周长之内。解题思路: 其实周长并和面积并没什么很大的区别,只不过周长并增加了判断左右端点是否被覆盖的标记 lbd 和rbd 数组, 以及numseg 数组 记录连续区间段数。 numseg : 一根扫描线扫描过去,会记录有多少个连续的区间段,每个连续的区间段都有两条相等的竖边,而每次扫描过去竖边长度都相等。 参考文献 :陈宏《数据结构的选择与算法效率》View Code 1 #include <iostream> 2 阅读全文
posted @ 2013-02-27 16:08 Mr. Ant 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1151题目大意: 给你n个矩形,求他们的总面积之和。解题思路: 这是我写的线段树扫描线第一题,搜狗了一下,说实话网上的解释都很抽象,昨晚用手机百度一下看到了一张让人一看就有灵感的扫描线图,今天找了很久都没找到那张图了,本来还想copy一下给大家分享来着。 哈哈,不过大家别急,为了方便描述,自己动手画了几个。 四条红线为矩形的上下底边,这里我们称之为扫描线(实际编程中不存在,只是一个概念)。 如图所示,要求两个矩形的面积并,可以把矩形分成几个小矩形,最后的面积总和为它们的和。 对于每个小矩形其 面积S=长*宽。宽就是两... 阅读全文
posted @ 2013-02-26 20:43 Mr. Ant 阅读(5523) 评论(2) 推荐(7) 编辑
摘要: 题目链接:http://poj.org/problem?id=1703题目大意:给定m个操作:D x y:x罪犯和y罪犯不在一个团伙。(总共只有两个团伙)A x y:询问x和y罪犯的关系解题思路: 很容易想到是并查集,但最后还是让我纠结了良久。一直MLE。 对于每次的D x y操作,每次不仅要找到两个不同集合标志头进行更新,还要更新a数组,即存储的相对集合的标志头。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #includ 阅读全文
posted @ 2013-02-25 19:58 Mr. Ant 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1811题目大意:给你一些ranking的比值关系,然后利用这些比值关系进行排名,让你确定是否能制作出排行榜,是的话就输出"OK",否则就请你判断出错的原因,到底是因为信息不完全(输出"UNCERTAIN"),还是因为这些信息中包含冲突(输出"CONFLICT")。如果信息中同时包含冲突且信息不完全,就输出"CONFLICT"。解题思路:1、利用并查集操作,将相关联的 '=' 两边的数字先放存在一个集合里。 阅读全文
posted @ 2013-01-11 18:46 Mr. Ant 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3887题目大意: 给你一颗n个节点的数,对于每个节点i,问你每个节点的子树中有多少个节点序列数小于i,求f[i]。解题思路: 用样例来说明,我们可以先深搜一遍,那么深搜得到的序列就是 7,3,15,15,12, 12, 3, 4, 4, 1, 1, 10, 14, 13, 13, 2, 2, 14, 10,……9, 7 对这个序列进行分析可以发现,举例:3,15,15,12, 12, 3 , 节点3中间的数就是它的子树序列。 dfs打好序列后就对序列进行遍历一遍,开两个st[], sd[] 数组, 阅读全文
posted @ 2013-01-10 17:13 Mr. Ant 阅读(1354) 评论(3) 推荐(1) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4059题目大意:给你一个整数n,让你求前面n个数中与n互素的数E(x^4)的和。解题思路: 可以先求出Sum(n):表示1^4+2^4+3^4+……+n^4; 然后再求Sum(n)-E(x^4) ,x表示与 n不互素的数。 求与n不互素的数可以利用容斥定理,求Sum(n)可以利用差分。简单介绍一下差分序列:给你一列数 a[i][1],a[i][2],a[i][3],a[i][4],a[i][5]……那么a[i][j]=a[i-1][j+1]-a[i-1][j], 即后一行是上一行相邻两项的差(第.. 阅读全文
posted @ 2012-12-25 23:54 Mr. Ant 阅读(660) 评论(0) 推荐(0) 编辑
摘要: 题目连接:http://poj.org/problem?id=3667题目大意:让你对一个区间进行操作。输入Q C 或者 Q C D。Q ==1 输入C: 表示让你求1-n中是否有连续的C个空hotel,如果有多个连续的C个空hotel,则取最左边的,并输出最左边的第一间hotel标号。让人住进去,那么这些空房就不能住人了。如果不存在连续的C个hotel,则输出 0。Q==2 输入 C D: 表示 从标号C到C+D-1的hotel的房间全部要退房,那么这么hotel都变成空。解题思路:用到线段树的区间操作,具体解析见代码。 1 #include <cstdio> 2 #includ 阅读全文
posted @ 2012-12-25 16:28 Mr. Ant 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2777题目大意: 给你一段区间[1,L] , 给定初始所有节点颜色为1,有下面两种操作:1、 “C A B D” 将区间[A,B]改变颜色为D。2、“P A B” 计算区间[A,B]有多少种不同的颜色。解题思路: 最土的可能100000个节点*100000次运算,暴力肯定TLE。解决这一类题目一般会想到线段树或者树状数组,这里用线段树。 这里每次改变都从根节点到叶子节点都同步更新的话肯定TLE,这里又要用到区间更新。 区间更新: 区间更新指的是当要改变某个区间[tl,tr]的颜色值,当往下递归到这个区间[l,r]包含在[tl,.. 阅读全文
posted @ 2012-12-18 20:56 Mr. Ant 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3037题目大意:求在n棵树上摘不超过m颗豆子的方案,结果对p取模。解题思路:题目可以转换成 x1+x2+……+xn=m 有多少组解,m在题中可以取0~m。利用插板法可以得出x1+x2+……+xn=m解的个数为C(n+m-1,m);则题目解的个数可以转换成求 sum=C(n+m-1,0)+C(n+m-1,1)+C(n+m-1,2)……+C(n+m-1,m)利用公式C(n,r)=C(n-1,r)+C(n-1,r-1) == > sum=C(n+m,m)。现在就是要求C(n+m,m)%p。因为n,m 阅读全文
posted @ 2012-12-16 19:48 Mr. Ant 阅读(2470) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 下一页