07 2013 档案

摘要:转自:https://www.byvoid.com/zht/blog/string-hash-compare 常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎不可能找到碰撞。 常用字符串哈希函数有BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等。对于以上几种哈希函数,我对其进行了一个小小的评测。Hash函数数据1数据2数据3数据4数据1得分数据2得分数据3得... 阅读全文
posted @ 2013-07-31 20:09 zhsl 阅读(288) 评论(0) 推荐(0)
摘要:题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1500DescriptionInput输入文件的第1行包含两个数N和M,N表示初始时数列中数的个数,M表示要进行的操作数目。 第2行包含N个数字,描述初始时的数列。 以下M行,每行一条命令,格式参见问题描述中的表格。Output对于输入数据中的GET-SUM和MAX-SUM操作,向输出文件依次打印结果,每个答案(数字)占一行。Sample Input9 82 -6 3 5 1 -5 -3 6 3GET-SUM 5 4MAX-SUMINSERT 8 3 -5 7 2DELETE 12 .. 阅读全文
posted @ 2013-07-31 12:55 zhsl 阅读(701) 评论(0) 推荐(0)
摘要:题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1269 Description这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器。你能帮助他吗?为了明确任务目标,可可对“文本编辑器”做了一个抽象的定义:文本:由0个或多个字符构成的序列。这些字符的ASCII码在闭区间[32, 126]内,也就是说,这些字符均为可见字符或空格。光标:在一段文本中用于指示位置的标记,可以位于文本的第一个字符之前,文本的最后一个字符之后或文本的某两个相邻字符之间。文本编辑器:为一个可以对一段文本和该文本中的一个光标进行如... 阅读全文
posted @ 2013-07-29 15:36 zhsl 阅读(402) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3487 对于一个数列有两种操作:1.CUT a b c,先取出a-b区间的数,然后把它们放在取出后的第c个数后面。2.FLIP a b,把区间a-b的数反转。对于第一个操作,进行两次区间移动,第a-1个数Splay到根节点,b+1个数Splay到root的右儿子,ch[ch[root][1]][0]则表示那个区间,然后把它们除掉,然后在移动区间,把第c个数Splay到root,第c+1个数Splay到root的右儿子,再把刚才的区间加上即可。第二次操作每个节点标价一下,表示他的儿子是否反转,用... 阅读全文
posted @ 2013-07-29 11:56 zhsl 阅读(362) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4619 一看就知道是二分匹配题目,对每个点拆点建立二分图,最后答案除2。因为这里是稀疏图,用邻接表处理。。。 1 //STATUS:C++_AC_31MS_480KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #in... 阅读全文
posted @ 2013-07-28 20:27 zhsl 阅读(204) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4618 直接暴力枚举中心点,在中间如果求不出最大值直接跳过优化下。。。 1 //STATUS:C++_AC_31MS_800KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include ... 阅读全文
posted @ 2013-07-28 20:12 zhsl 阅读(273) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4616 比较典型的树形DP题目,f[u][j][k]表示以点u为子树,经过 j 个陷阱的最大值,其中k=0表示从u点出发,k=1表示终点为点u。则转移方程为:f[u][j+is_rtap][k]=Max{ f[v][j][k] | v为u的儿子节点,0 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 ... 阅读全文
posted @ 2013-07-28 20:08 zhsl 阅读(576) 评论(0) 推荐(1)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 线段树保存区间是否被覆盖以及区间的和即可,在询问的时候在线段树上二分查找就可以了。。。代码写得比较挫> 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #inclu... 阅读全文
posted @ 2013-07-28 18:24 zhsl 阅读(217) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4612 简单图论题,先求图的边双连通分量,注意,此题有重边(admin还逗比的说没有重边),在用targan算法求的时候,处理反向边需要标记边,然后缩点,在树上求最长链。。 此题在比赛的时候,我的模板数组开小,WA一下午,sd。。。。 1 //STATUS:C++_AC_734MS_37312KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #... 阅读全文
posted @ 2013-07-28 18:20 zhsl 阅读(295) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4611 先求出循环节,然后比较A和B的大小模拟过去。。。 1 //STATUS:C++_AC_15MS_436KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #in... 阅读全文
posted @ 2013-07-28 18:14 zhsl 阅读(281) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4605 题意:给一颗树,每个节点有个权值w[u],每个节点只有两个儿子或者没有儿子,从根节点放下一个小球,小球有一个权值X: 1.如果X=w[u],小球停止下落。 2.如果Xw[u],小球往左儿子的概率为1/7,往右儿子的概率为7/8。 现在有m个询问,表示重量为x的小球到达v节点的概率。 首先离散化节点的权值。考虑从根节点到达v节点是一条路径,那么我们可以深度遍历树的每个节点,对于很多节点的询问都会经过相同的路径,因此我们可以保存前面的经过的点的重量的数目,因为左边和右边的情... 阅读全文
posted @ 2013-07-28 18:09 zhsl 阅读(300) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3436 树状数组做法 Splay tree的经典题目,有删除和移动操作。首先要离散化各个点,而且对于没有区间还要缩点。对于Top操作,先把目标节点删除,然后移到最左端。Query操作,Splay(tar,0),然后直接访问size。对于Rank操作,通过size产找即可。注意,在每次更新后,都要把处理过的节点都要Splay(tar,0)才能保证复杂度为O(log n),因为这样才能方便下次的访问,因为这个TLE了一个下午+一个晚上。。。。Splay()操作太神了。。 1 //STATUS:... 阅读全文
posted @ 2013-07-24 23:29 zhsl 阅读(568) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1890 题目中涉及数的反转和删除操作,需要用Splay tree来实现。首先对数列排序,得到每个数在数列中的下标x。Splay tree的每个节点标记以它为根的子树是否需要反转,用到懒惰操作,保证nlogn,在每次操作的时候Push_Down()和Push_Up。在建树的时候是数的下标为节点标号建立数,如果要询问数num[i],则把num[i]在数列中的下标旋转到根节点root,size[ch[root][0]]+已经排好序的数的数目就是答案。注意,这里因为涉及到数的反转操作,因此在Splay... 阅读全文
posted @ 2013-07-24 11:12 zhsl 阅读(302) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4608 直接暴力枚举,没什么好说的。。。。 1 //STATUS:C++_AC_765MS_740KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include ... 阅读全文
posted @ 2013-07-23 22:35 zhsl 阅读(239) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 首先考虑找一条最长链长度k,如果mk+1,那么最长链上还有其他分支,来回走一遍,因此答案为2*m-k-1。。。求最长链可以DP,两次BFS或者DFS等。。 1 //STATUS:C++_AC_453MS_3524KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 ... 阅读全文
posted @ 2013-07-23 22:33 zhsl 阅读(334) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4604 因为deque最后的数列是单调不降的,因此,我们可以枚举数列中的某个中间数Ai,如果从中间数Ai开始,如果后面的要和这个中间数形成单调不降的序列,那么后面的数必须是单调不降或者单调不升的序列,才能进入deque中,因此为两者长度的和,这就是一个LIS的DP。然后枚举的时候从后往前枚举,复杂度O( n*log n)。这里要注意一点,存在相同元素,因此需要减去两个里面出现Ai次数的最小值! 1 //STATUS:C++_AC_281MS_3768KB 2 #include 3 #i... 阅读全文
posted @ 2013-07-23 22:27 zhsl 阅读(376) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4602 把n等效为排成一列的n个点,然后就是取出其中连续的k个点。分两种情况,一种是不包含两端,2^( n−k−2 ) ∗ (n−k−1) ,另一种是包含两端:2 ∗ 2^( n – k − 1)。然后特殊情况特判一下。。 1 //STATUS:C++_AC_31MS_248KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include... 阅读全文
posted @ 2013-07-23 22:20 zhsl 阅读(247) 评论(0) 推荐(0)
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2365 我没看懂题目。。。这样理解:一个有向图,要给一些边染色,使得所用的颜色最多,且S到T的任意路径的都包含所有颜色。 或者:给定一个无向图,图中有一个起点S和一个终点T。要求选K个集合S1,S2,…,SK,每个集合都含有图中的一些边,任意两个不同的集合的交集为空。并且从图中任意去掉一个集合,S到T都没有通路。要求K尽量大。 容易想到最短距离就是总共的数量tot,然后在图上求一个层次图,只要点的距离标号i 3 #include 4 #includ... 阅读全文
posted @ 2013-07-23 00:58 zhsl 阅读(248) 评论(0) 推荐(0)
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2362 裸的匹配问题,直接KM,就算是O(n^4)的KM也不会超。当然注意到题目中左边的点到右点所连的边的权值是一样的,所以完全可以贪心拍个序,然后找增广路。。。 1 //STATUS:C++_AC_250MS_848KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include... 阅读全文
posted @ 2013-07-23 00:51 zhsl 阅读(237) 评论(0) 推荐(0)
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3725 n个点排列,给每个点着色,求其中至少有m个红色的点连续的数目。f[i]表示前i个点至少有m个连续红色的个数,则f[i]=f[i-1]*2+2^(i-m-1)-f[i-m-1]。 1 //STATUS:C++_AC_120MS_1784KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #inclu... 阅读全文
posted @ 2013-07-23 00:46 zhsl 阅读(300) 评论(0) 推荐(0)
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3720 题意:在一个矩形区域投掷飞镖,每个整点有磁性,每个点的磁性是一样的,因此飞镖只会落在整点上,投到每个点的得分是:Ax+By。矩形区域里面有个多边形,如果飞镖投在多边形里面则得分,求最终的得分期望。 对于每个点,以它为中心的边长为1的正方形范围内,它都可以把飞镖吸引过来,则最后飞镖能得分的面积就是多边形内以及多边形上所有整点的正方形的面积并,然后期望公式E(X)=p*xi。。 1 //STATUS:C++_AC_900MS_188KB 2 #i... 阅读全文
posted @ 2013-07-23 00:41 zhsl 阅读(443) 评论(0) 推荐(0)
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3721 容易的贪心题,排个序。。 1 //STATUS:C++_AC_840MS_6272KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #includ... 阅读全文
posted @ 2013-07-23 00:31 zhsl 阅读(487) 评论(2) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=2096 f[i][j]表示从当前状态到目标状态的期望。。。 1 //STATUS:C++_AC_188MS_8076KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include... 阅读全文
posted @ 2013-07-19 20:20 zhsl 阅读(258) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/shahdza/article/details/6317011①//适用于正整数 template inline void scan_d(T &ret) { char c; ret=0; while((c=getchar())'9'); while(c>='0'&&c inline bool scan_d(T &ret) { char c; int sgn; if(c=getchar(),c==EOF) return 0; //EOF while(c!='-'& 阅读全文
posted @ 2013-07-19 01:14 zhsl 阅读(221) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3468 以前用线段树做过,现在用Splay Tree A了,向HH、kuangbin、cxlove大牛学习了各种Splay各种操作,,,Orz。。 Splay Tree的区间操作和线段树的操作差不多,也是保存子树的值,然后懒惰操作,在Rotate()最后维护节点信息的时候,只要Push_Up(y)的,因为x还需要网上旋转到根节点,最后更新下就可以了,并且在下一次Rotate()的时候,还会Push_Down(x)的信息,因此不能Push_Up(x)。 1 //STATUS:C++_AC_3407MS_3696KB 2 ... 阅读全文
posted @ 2013-07-19 00:53 zhsl 阅读(287) 评论(0) 推荐(0)
摘要:主要训练:数据结构,图论,数学,DP。。。数据结构:Splay tree, 动态树:LinkCut Tree 树链剖分,可持久化数据结构 自动机+DP 主席树 kd树 线段树加强训练 Dancing link精确覆盖图论,白书上的总结一下,加强训练,提高思维http://blog.sina.com.cn/s/blog_6635898a0102dqs2.html。。数学:生成函数等,接触其它题型,按链接刷http://blog.sina.com.cn/s/blog_6635898a0100magq.htmlDP:概率DP,数位DP,树形DP... 阅读全文
posted @ 2013-07-18 00:47 zhsl 阅读(757) 评论(2) 推荐(2)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 利用二进制,R为1、G为2、B为4,然后通过异或运算可以得到其它组合颜色。建立7颗线段树,每颗线段树保存每种颜色的长度。。。 1 //STATUS:C++_AC_203MS_4780KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #i... 阅读全文
posted @ 2013-07-17 20:41 zhsl 阅读(336) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=1177 比矩形面积并麻烦点,需要更新竖边的条数(平行于x轴扫描)。。求横边的时候,保存上一个结果,加上当前长度与上一个结果差的绝对值就行了。。。 1 //STATUS:C++_AC_32MS_1416KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 ... 阅读全文
posted @ 2013-07-17 20:35 zhsl 阅读(3033) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 需要保存区间覆盖线>=2的线段的长度,根据情况来更新。。。 1 //STATUS:C++_AC_250MS_476KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include ... 阅读全文
posted @ 2013-07-17 20:28 zhsl 阅读(332) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=1151 扫描线+离散+线段树,线段树每个节点保存的是离散后节点右边的线段。 1 //STATUS:C++_AC_16MS_208KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include ... 阅读全文
posted @ 2013-07-17 20:19 zhsl 阅读(303) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3017 这题的DP方程是容易想到的,f[i]=Min{ f[j]+Max(num[j+1],num[j+2],......,num[i]) | 满足m的下界 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #i... 阅读全文
posted @ 2013-07-17 00:17 zhsl 阅读(290) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4415 用贪心来解,开始分为两个集合的方法错了,没有考虑之间的相互影响,正确的姿势应该是这样的,分两种情况考虑: 1.只考虑Bi全为0的集合,排个序,能取多少就取多少。 2.如果Bi不为0的集合中的Ai的最小值low如果大于m,那么就到了 1 的情况。否则两个集合放在一起排个序,Bi不为0的集合中至少选取low,刀的总数为sum,那么除去排序后sum个Ai值大的敌人,然后还剩下m-low个durability。用这m-low去消灭剩下的集合。 1 //STATUS:C++_AC_... 阅读全文
posted @ 2013-07-16 16:08 zhsl 阅读(384) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4414 直接暴力判断即可。 1 //STATUS:C++_AC_15MS_232KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #incl... 阅读全文
posted @ 2013-07-16 15:50 zhsl 阅读(308) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=1981 容易想到直接枚举两个点,然后确定一个圆来枚举,算法复杂度O(n^3). 这题还有O(n^2*lg n)的算法。将每个点扩展为单位圆,依次枚举每个单位圆,枚举剩下的单位圆,如果有交点,每个圆产生两个交点,然后对产生的2n个交点极角排序,判断被覆盖最多的弧,被覆盖相当于这个弧上的点为圆心的圆可以覆盖到覆盖它的那些点,所以被覆盖最多的弧就是答案了。O(n^3): 1 //STATUS:C++_AC_4032MS_208KB 2 #include 3 #include 4 #include 5 //#inc... 阅读全文
posted @ 2013-07-15 21:43 zhsl 阅读(603) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=2442 问题一:K个有序表合成一个有序表,元素共有n个。用堆优化 问题二:两个序列的前n小的元素。堆优化。 这题就是问题二的扩展,每次处理两个序列,求出两个序列的前n小的元素,然后把前n小的元素看做一个序列,再和下一个序列一起处理,依次类推下去。 1 //STATUS:G++_AC_532MS_768KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10... 阅读全文
posted @ 2013-07-15 11:19 zhsl 阅读(322) 评论(0) 推荐(0)
摘要:Splay tree入门题,学好代码风格,学习HH大牛的,传送门。。 1 #include 2 #include 3 #include 4 //#include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19 #include 20 #include 2... 阅读全文
posted @ 2013-07-14 21:27 zhsl 阅读(324) 评论(0) 推荐(0)
摘要:转自:http://blog.sina.com.cn/s/blog_7c4c33190100sg9r.htmlSplay Tree(又叫伸展树)本质上也是一棵二叉查找树。它不是严格平衡的,但通过一种伸展(splay)操作可以使它一次操作的时间均摊复杂度为O(logN)。详细时间复杂度证明请参考集训队论文。这里,我只说说伸展树的实际操作。和其他二叉查找树一样,Splay Tree支持查找询问、修改、加入、删除等操作,但又有所不同。对于询问,每次找到目标值后,把目标位置伸展到根。对于修改,与询问类似。对于加入,如果是一个节点加入,则与上列相似。若是插入一个区间(一棵子树),可以把要插入地方的前.. 阅读全文
posted @ 2013-07-14 21:24 zhsl 阅读(364) 评论(0) 推荐(0)
摘要:关于入门资料,推荐看,取火柴的那10个定理必须理解。五篇国家集训队论文: 张一飞: 《由感性认识到理性认识——透析一类搏弈游戏的解答过程 》 王晓珂:《 解析一类组合游戏》 方展鹏:《浅谈如何解决不平等博弈问题》 贾志豪:《组合游戏略述——浅谈SG游戏的若干拓展及变形》 曹钦翔:《从“k倍动态减法游戏”出发 探究一类组合游戏问题》 下面是题目总结:1.HDU 1404 预处理,推出所有情况的胜负情况。 1 //STATUS:C++_AC_468MS_4140KB 2 #include 3 #include 4 #include 5 //#include 6 ... 阅读全文
posted @ 2013-07-07 18:07 zhsl 阅读(335) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3648‘ 题意:一对情人举行婚礼,有n对夫妇参加,别人对着坐在一个长桌子的两边,新娘和新郎坐在最后面,新娘只能看见坐在他对面的人。现在,n对夫妇中有两两通奸了,新娘不希望看到这种情况,先给出通奸的人,求是否存在可行的排位方法。 有两种建立2sat模型的方法,第一种是对每个人的坐的方向来建立,0和1分别表示坐在左边和右边。但是可以不考虑坐方向,只考虑他们能不能坐在同一边,需要考虑新郎的一边,因为新娘那边得不出限制条件。 1 //STATUS:C++_AC_16MS_180KB 2 #include 3 #includ... 阅读全文
posted @ 2013-07-07 12:58 zhsl 阅读(230) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=2296 二分+2sat,每个点的上下两个方向为2sat的两个状态。 1 //STATUS:C++_AC_16MS_536KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #... 阅读全文
posted @ 2013-07-07 12:15 zhsl 阅读(314) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3207 题意:在一个圆圈上有n个点,现在用线把点两两连接起来,线只能在圈外或者圈内,现给出m个限制,第 i 个点和第 j 个点必须链接在一起,问是否存在可行解。 容易想到圈内和圈外分别表示2sat的两种状态,对每一个限制 i 和 j ,考虑所有其它横跨他们的限制,然后连边就可以了。 1 //STATUS:C++_AC_47MS_6300KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include... 阅读全文
posted @ 2013-07-07 12:02 zhsl 阅读(249) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1814 简单的2sat题。 1 //STATUS:C++_AC_390MS_996KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #inc... 阅读全文
posted @ 2013-07-07 11:46 zhsl 阅读(418) 评论(1) 推荐(1)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3622 题意:一个平面上有很多的炸弹,每个炸弹的爆炸范围是一样的,求最大的爆炸范围使得炸弹之间不相互影响。 二分爆炸范围,然后建立2sat模型,看是否存在解。 1 //STATUS:C++_AC_171MS_972KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #i... 阅读全文
posted @ 2013-07-07 11:35 zhsl 阅读(244) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4115 题意:Alice和Bob玩猜拳游戏,Alice知道Bob每次会出什么,为了游戏公平,Bob对Alice的出法做出了一定限制,限制为Alice的第 i 次和第 j 次的出法相同或者不同。在n轮游戏汇总,如果Alice输了一次,那么Alice是loser。 Alice每次只有两种选择,要么赢,要么平局,建立2sat模型,然后分情况建立边,分Bob第 i 次和第 j 次的拳不相等和相等两种,然后在这两种里面分对Alice的限制为相同和不相同。 1 //STATUS:C++_AC_15MS... 阅读全文
posted @ 2013-07-07 11:02 zhsl 阅读(389) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3678 分别对and,or,xor推出相对应的逻辑关系: 逻辑关系 1 0 A and B A'->A,B'->B A->B',B->A' A or B A'->B',B'->A A->A',B->B' A xor B A'->B,B'->A,A->B',B->A' A->B,A'->B' 1 //STATUS:C++_AC_96 阅读全文
posted @ 2013-07-06 15:40 zhsl 阅读(409) 评论(0) 推荐(0)