SPOJ
文章平均质量分 90
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
SPOJ 2713 Can you answer these queries IV(线段树)
线段树的题真是好多,像这个系列,一直可以到Ⅵ、Ⅶ。 Ⅲ我就不说了,就是在Ⅰ的基础上加一个单点修改,Ⅳ可就几乎是完全不同了,它是要区间开根号,然后询问区间和。可能你会说,区间开根号怎么做,如何维护区间和?因为区间开根号后,区间和的值显然不是原值开根号(叶子节点除外)。开始我还想了用对数去解决这个问题,对于对数,对真数开根号,等于对对数除以2。但是对数的和并不是想要的区间和。原创 2017-07-20 09:06:36 · 437 阅读 · 0 评论 -
SPOJ 1557 Can you answer these queries II(离线处理+线段树求历史最大)
膜拜杨哲大犇orz…… Can you answer these queries……这也是一个系列,线段树系列。 之前第一个我们已经写过了,就是求区间最大连续子串。这个与第一个不同,这个要求是已经取过的数字,第二次遇到了不计算,即子串1、2、1的和是3而不是4。也就意味着,你询问区间的不同,对应的最大连续子串也会不同,故显然在线线段树是做不了的,继续用离线大法。原创 2017-07-19 16:05:23 · 397 阅读 · 0 评论 -
SPOJ 1043 Can you answer these queries I (超强线段树)
题意简单明了,静态求区间最大连续子序列。 想起之前做过的一道LCT的题目,是求链上染色区域个数,和这个有丝丝相似。 首先,通过观察区间最大连续子序列和的构成,我们发现,某一个区间的最大连续子序列max的备选序列可以是它的左右子区间的最大连续子序列,或者是左子区间的最大右端连续子序列rmax与右子区间的最大左端连续子序列lmax的和。那么在一棵线段树中,我们需要维护的就是该区间的最大连续子序列max、最大左端连续子序列lmax和最大右端连续子序列rmax。原创 2017-07-18 13:02:09 · 178 阅读 · 0 评论 -
SPOJ 422 Transposing is Even More Fun(Polya计数)
大致题意:给你一个2ax2b的矩阵,然后让你把它转置为2bx2a的矩阵,每次可以交换两个数字,问最少需要多少步交换。 首先,我还是借鉴一下别人的图做一下解释。我们就以a=1,b=2为例子解释: 意思是,我把某一个位置的坐标转换成二进制表示。例如原本3的位置是010,转置之后就是100。通过观察,我们发现一个规律,对于一个一开始的位置的地址表示,把他进行旋转之后,对应地原创 2017-09-16 09:11:09 · 964 阅读 · 0 评论 -
后缀数组初学 + SPOJ DISUBSTR(模板)
后缀数组是我见过的这么多算法中,最晦涩难懂的一个之一。 他本是只是几个数组,严格意义上来说不能算是一个数据结构,只是他求出来的sa[]数组和height[]在字符串统计中非常的有用。其具体的用法就先不在这里说,本文只是介绍求解的方法,并给出模板。 首先,得介绍后缀数组是什么个东西。所谓后缀数组,顾名思义就是对于一个字符串,我求出他所有的后缀的一个排名,记录到sa...原创 2018-02-28 21:20:32 · 266 阅读 · 0 评论 -
后缀自动机初探(模板)+ SPOJ LCS2
据说后缀自动机这个东西,要先学后缀数组还有后缀树,再学后缀自动机。但是我只学了后缀数组,然后就直接学这个,难免可能有些理解不到位。硬刚了两天吧,才算是有一点小的理解。 首先呢,最初的源头还是CLJ大佬的的那个ppt,但是说实话,可能因为是本人太渣,有些地方看不懂,或者说证明太多了不想看。论文看了个大致没有深究,也用自己的想法强行理解,可能有些不对,以后再慢慢研究。 ...原创 2018-03-21 20:49:05 · 363 阅读 · 2 评论 -
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 阅读 · 0 评论 -
SPOJ OPTM Optimal Marks(构图+最小割)
大致题意:给你一个图,有一些点初始已经有了标号。图中的边权定义为连接的两个点的点权异或值,现在问你如何给未标号的点编号,使得标号之后图的权值和最小。 论文原题。由于是异或,而异或操作与二进制的每一位有关,不同二进制位之间是没有影响的。所以我们可以考虑对每一个二进制位单独处理。如果单独处理,我们可以发现,所有点在这一个二进制位的编号,要么是0要么是1。而显然,我们的目标是把这些个点分成两个部分,然后使得0与1相连的边尽可能的少。很自然的,我们可以想到最小割的模型。 首先,既原创 2018-05-10 15:58:14 · 302 阅读 · 0 评论