自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

alpc_qleonardo

半退役状态

  • 博客(14)
  • 收藏
  • 关注

原创 CodeForces 986C AND Graph(构图+DFS)

大致题意:给你m个数字,这m个数字都小于2^n。对于任意的数字i、j,如果i&j==0,那么连接i与j,现在问最后连完所有的编后,总共有多少个连通块。 直接去考虑还是不太好想,还是从数据范围出发。n为22,2^n约等于400W,所以说大致需要一个O(m*2^n)的算法。我们考虑一下构图,对于每一个数字x,我们知道~x表示x的补集,二者的与值为0,显然把~x的部分1换成0再与x按位与的值也是0。那么对应回来如果x|(1<<k)与y的结果为0,那么x与y的结果也为0,其中k表示

2018-05-31 16:01:12 796

原创 CodeForces 981F Round Marriage(二分答案+贪心)

大致题意:给你n个新郎和新娘以及他们所在的位置,现在要两两配对,配对有个代价,就是二者的距离。现在问,这n对新人中,最大代价的最小值是多少。 这体显然是一个二分答案,二分最大代价最小值,再判断是否可行。那么问题的 关键就是如何判断问题是否可行。数据范围是2e5,所以要求我们要在O(N)的复杂度内完成这个判断。对于每一对人i和j,他们的代价是min(|a[i]-b[j]|,L-|a[i]-b[j]|),分细一点可以把情况分为两种。当a[i]>b[j]时,代价为min(a[i]-b[j]

2018-05-31 09:53:59 998 1

原创 CodeForces 981E Bookshelves(dp+思维)

大致题意:给你q个操作和一个长度为n的序列,初始状态序列全为0。每个操作是对区间[l,r]增加v。然后,现在你可以只选择这q个操作中的任意几个进行操作,问你操作完毕之后整个序列中最大值是否可以是1~n,输出可以的数字。也就是说,对于每一个数字i,看能否找到一个操作的子集,使得操作完毕后区间最大值为i。 可以说刚读完题的时候没有任何想法,完全不知道怎么下手,但是数据范围给了我们提示,n、q分别是1e4级别,那么可以考虑O(nq)的算法。首先,对于询问,我们按照操作左端点l进行排序。其次,再

2018-05-28 23:22:48 379

原创 CodeForces 981D Bookshelves(dp+贪心)

大致题意:给你n本书,要求你按顺序把这些书放到m个书架上面,每个书架的权值定义为书架内所有书的权值和。现在要求求这些书架权值的按位与操作和最大。 考虑二进制的性质,最高位如果取了,肯定比不取的值大。因此,如果存在一种情况使得二进制下,某一个高位为1,那么最后结果肯定大于等于这一位为1的数字。然后,最后结果显然是可以按位分解的,具有叠加性,例如样例24=(11000)2,那么一定能够拼凑出8和16。于是我们就可以考虑从高位开始贪心累加,如果令答案这一位为1可以找到可行解,那么把这一位贡献加入

2018-05-28 11:25:39 836

原创 HDU 5820 Lights(可持久化线段树)

大致题意:有N个路灯,以坐标的形式给出每个路灯的位置,坐标区间是[1,50000]。现在问你,任意两个路灯之间是否存在一条路径,使得路径总长是两灯的曼哈顿距离,同时路径的转折点处(若有)是一个路灯。输出YES/NO。有最多5e10个点,如果暴力寻找是否存在路径显然是不行的。那么我们转而看看,如果满足存在这样的一条路径应该满足什么样的条件。我们注意到,如果两个不共线的点能够相互到达,那么一定能构成一个矩形。相反,就是一定不能构成一个矩形。可以证明,对于点(x,y),在水平方向离它最近的点为(x',y),在垂直

2018-05-17 20:35:49 297

原创 HDU 4348 To the moon(可持久化线段树)

大致题意:支持Q、C、H、B四种操作,分别对应查询当前区间[l,r]的和,修改区间[l,r]并使得时间加一,查询第x个时刻区间[l,r]的区间和,回到第x个时刻。 纯数据结构题目,支持回到、查询历史版本,显然是一个可持久化数据结构,而支持查询区间和以及区间修改,首选的就是可持久化线段树了。这里有一个时间的定义,所以我们对每一个时间动态建立一个线段树,每个线段树继承之前时间的信息。对于两个查询操作,直接在对应时刻版本的线段树里面查询即可,我们用rt[i]表示第i个时刻对应线段树

2018-05-16 21:32:33 295

原创 HDU Kth number(可持久化线段树)

大致题意:典型的静态区间第K大。 之前应该是写过动态区间第K大的题目,那个是用到了线段树套平衡树Treap。虽然说支持动态修改,但是这种方法的编程复杂度和代码量实在是太大,在比赛中难以接受。在这里,我们可以考虑用可持久化线段树来解决这个问题。 首先,关于区间的问题,要考虑如何只选取区间内部的数字。我们可以考虑初始数字1~N是按照顺序插入到主席树当中的,那么第i次操作就对应第i个数字被插入,第i棵线段树就对应一个包含第1~i个数字的线段树。那么显然,对于区间[l,r],如果

2018-05-16 20:36:40 606

原创 可持久化线段树总结

         之前也写过一篇讲主席树的文章,但是那时候理解的实在是太片面了。        首先,所谓可持久化,就是说我有很多个操作,但是我在任意时刻可以回到之前的某一个操作之前的样子。或者说可以知道某一个操作之前的信息。对于普通的线段树来说,肯定是不能够支持的,那么我们如何解决这个问题呢?        最简单的,我们考虑暴力一点的方式,对于每一个操作,我在之前的基础上单独建立一棵线段树,把...

2018-05-16 20:34:09 663 1

原创 ZOJ 2676 Network Wars(分数规划+最小割)

大致题意:给你一个网络,让你求一个最小割[S,T],使得这个割中Σcapi/|[S,T]|最小。 论文原题。比较经典的一个分数规划问题。分数规划那些具体的证明什么的今天就不在这里讲了,之后会有总结~ 然后本题还是按照套路。令ans=Σcapi/|[S,T]|,那么可以有0=Σcapi-ans*|[S,T]|,二分这样的一个ans,使得f(x)=min(Σcapi-ans*|[S,T]|)为0即可。问题的关键在于怎么求这个f(x)。 我们不妨把cap 看作一个向量,表示从1 到

2018-05-10 16:03:09 336

原创 SPOJ OPTM Optimal Marks(构图+最小割)

大致题意:给你一个图,有一些点初始已经有了标号。图中的边权定义为连接的两个点的点权异或值,现在问你如何给未标号的点编号,使得标号之后图的权值和最小。 论文原题。由于是异或,而异或操作与二进制的每一位有关,不同二进制位之间是没有影响的。所以我们可以考虑对每一个二进制位单独处理。如果单独处理,我们可以发现,所有点在这一个二进制位的编号,要么是0要么是1。而显然,我们的目标是把这些个点分成两个部分,然后使得0与1相连的边尽可能的少。很自然的,我们可以想到最小割的模型。 首先,既

2018-05-10 15:58:14 302

原创 ZOJ 4030 JUMPin' JUMP UP!!!(字符串哈希 + 思维)

   JUMPin' JUMP UP!!!Time Limit:1 Second      Memory Limit: 131072 KBTired of solving mathematical equations, DreamGrid starts to solve equations related to strings: for two stringsand with...

2018-05-07 21:26:36 714

原创 ZOJ 4027 Sequence Swapping(DP+思维)

                大致题意:给你一些括号,有左括号有右括号,每一个括号对应一个数值vi。当左右括号i、j相邻并且左括号在左、右括号在右,你可以选择交换这两个括号的位置,并且产生一个vi*vj的权值。交换次数不限,现在问你能够产生的最大权值和是多少。        首先,对于左括号来说,如果往右移了一位,即与某一个右括号交换了,那么就一定不会交换回来。这是一个很明显的无后效性,因此考虑...

2018-05-04 13:51:52 498

原创 ZOJ 4029 Now Loading!!!(前缀和+二分优化)

大致题意:给你 an和pn,然后让你求(∑i=1mi⋅∑j=1n⌊aj⌈logpaj⌉⌋)mod109.显然,直接计算的复杂度是O(nm)的,对于1≤n,m≤5×105的数据来说显然是会TLE的。但是我们考虑到分母logpaj的取值很少,只能是[2,30],所以可以考虑根据把分母相同的一起计算。首先,我们对an进行排序,然后对于每一个给定的pi,根据pi的不同次方来统计。例如当考虑pji时,我们要统计∑pk−1i<ak≤pkin⌊akk⌋。由于an已经排好序,所以我们可以用二分的方法确定满足

2018-05-04 10:31:14 411

原创 SPOJ TSUM Triple Sums(FFT+生成函数+容斥原理)

大致题意:给你N个数字,然后从中任意挑选三个数字并求和,让你输出和的所以可能以及对应取到每个和的方案数。 由于是加法,考虑用生成函数,两个生成函数相乘可以得到任意两个项相加的和,三个也是一样。由于|si| <=20000,因此首先把si整体扩大20000防止出现负数。令A为对应的生成函数,我们可以发现,A*A*A的结果回出现重复。A*A*A=三个数字一样+其中两个数字一样+三个数字不相同。于是考虑容斥,减去重复的。令A*A*A表示总体,B表示取两个相同数字,那么A*B=其中两个数字一样+三个

2018-05-03 15:32:18 599

空空如也

空空如也

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

TA关注的人

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