自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 收藏
  • 关注

原创 HDU - 5394 Trie in Tina Town(回文自动机+字典树)

题目链接:点击查看题目大意:给出一个字典树,现在需要求出字典树上所有的回文串做出的贡献,为 出现次数*回文串长度,求出这个答案题目链接:可以直接在字典树上dfs然后维护贡献,不过这就涉及到了回文自动机的删除功能,其实实现起来很简单,只需要将last变成数组记录深度即可,每个节点的贡献为其fail所指的结点的贡献加上其本身的长度,因为是最长回文后缀,所以肯定包含了fail所指的结点的贡献,再...

2020-01-31 17:07:26 419

原创 HDU - 4300 Clairewd’s message(扩展KMP)

题目链接:点击查看题目大意:给出两个字符串 s 和 t ,字符串 s 代表着一种密码的映射,字符串 t 代表着一段密文+明文,题目保证密文是完整的,但明文只有一部分,现在问如何补全字符串 t ,使得字符串 t 的前半部分是密文,后半部分是明文,且明文和密文所表达的字符串经过密码映射后是一致的,且满足补齐后的字符串 t 的长度最短题目分析:因为要保证前后一致且最短,那么就挑选的位置尽可能靠前...

2020-01-31 16:47:28 373

原创 CodeForces - 1295E Permutation Separation(线段树+二维偏序,好题)

题目链接:点击查看题目大意:给出一个1~n的排列,现在要求选择一个合适的分割点,将整个排列分为两个部分,要求通过适当的移动使得前半部分的所有数值都小于后半部分的数值,现在给出移动每个数字所花费的代价,输出最小代价题目分析:断断续续想了三天的一个题,终于算是有点小突破了。。可以试着写写题解巩固一下了说在前面,这个题目可以视为二维偏序问题,第一维下面称作分割点,第二维下面称作断点,注意区分...

2020-01-31 15:05:38 583

原创 HYSBZ - 2342 双倍回文(回文自动机)

题目链接:点击查看题目大意:给出一个字符串 s ,求最长双倍回文子串,题目规定双倍回文子串是长度可以被4整除,且前半段、后半段以及整个字串都是回文串题目分析:因为在构造回文自动机时,连接的失配边就是最长回文后缀的边,所以构造好回文自动机后,在fail树上dfs一次就能直接出答案了代码:#include<iostream>#include<cstdio> ...

2020-01-31 00:39:10 282

原创 HYSBZ - 2565 最长双回文串(回文自动机)

题目链接:点击查看题目大意:给出一个字符串 s ,求最长双回文子串,题目规定最长双回文子串 t 可以拆成左右两部分,满足两部分都是回文串题目分析:一开始读错题了,以为是双回文串本身也需要是回文串,结果发现并不是,这样的话直接用回文自动机求就好了,其中有个参数len数组正好代表了以某个点为结尾的最长回文后缀的长度,正着跑一遍维护一个最长回文后缀的长度,然后再倒着跑一遍维护答案就好了代码:...

2020-01-30 22:18:39 322

原创 HDU - 5658 CA Loves Palindromic(回文自动机/哈希+树状数组)

题目链接:点击查看题目大意:给出一个字符串 s ,接下来给出 m 个查询,每次查询的形式会给出一个 l 和 r ,问区间 [ l , r ] 内有多少个回文子串题目分析:因为查询的次数比较多,所以我们可以预处理出答案然后O(1)回答,因为回文自动机的时间复杂度为O(n)级别的,我们可以枚举 n * n 个子串依次记录答案代码:#include<iostream>#i...

2020-01-30 21:57:07 265

原创 HDU - 6629 string matching(扩展KMP)

题目链接:点击查看题目大意:给出一个字符串 s 和一个暴力程序,用于求解 s 的每个后缀和原字符串的最长公共前缀,现在问一共需要执行多少次比较操作题目分析:首先肯定不能暴力去模拟,时间复杂度n*n,也不能用后缀数组,这个题好像特地卡了后缀数组的时间,倍增法nlogn会被卡掉,DC3因为常数太大也会被卡掉,网上说AC自动机会被卡内存,因为整个字符集是ASCII码的范围,那就只能用扩展KMP来...

2020-01-30 17:37:51 276

原创 HYSBZ - 3676 回文串(回文自动机)

题目链接:点击查看题目大意:求出回文子串中 出现次数*长度 的最大值题目分析:回文自动机直接搞维护最大值就是答案了代码:#include<iostream>#include<cstdio> #include<string>#include<ctime>#include<cmath>#include<cst...

2020-01-30 16:59:57 266

原创 SPOJ - NUMOFPAL Number of Palindromes(回文自动机)

题目链接:点击查看题目大意:给出一个字符串s,问一共有多少个不同的回文子串题目分析:咕咕咕了好几个月的回文自动机终于算是学会了,会了之后感觉还是蛮简单的,多练练手加强一下对模板的理解吧,这个题目显然可以用马拉车秒掉,但为了练习一下回文树,还是特地写了一发,效率还是蛮不错的代码:#include<iostream>#include<cstdio> #in...

2020-01-30 16:55:06 284

原创 回文自动机模板

原理+证明的大牛博客:https://blog.csdn.net/lwfcgz/article/details/48739051const int N=1e3+100;char s[N];int n;struct Palindrome_tree{ int nxt[N][26]; int fail[N]; // 当前节点最长回文后缀的节点 int len...

2020-01-30 16:45:06 301

原创 CodeForces - 1295D Same GCDs(欧拉函数)

题目链接:点击查看题目大意:给出两个正整数 a 和 m ,再给出 x 的范围为[ 0 , m ),现在要求满足 gcd ( a , m ) = gcd ( a + x , m ) 时 x 的个数题目分析:因为辗转相除法的定义:gcd(a,b) = gcd(b,a mod b)可知,当 i ∈ [ a , m ] 和 i ∈ [ m , 2 * m ] 时,gcd( i ,m ) 相等的 i...

2020-01-30 12:52:46 1879

原创 CodeForces - 1295C Obtain The String(dp预处理+贪心)

题目链接:点击查看题目大意:给出一个字符串 s 和一个字符串 t ,再给出一个字符串 z ,初始时字符串 z 为空串,现在需要利用规则构造字符串 z ,使得 z == t ,规则就是每次可以挑选字符串s 的任意子序列添加到字符串 z 后面,代价是一次操作数,问如何才能操作数最少,如果不能完成构造,输出 -1题目分析:先dp预处理一波,然后直接贪心找就行了,dp预处理主要是用二维dp [ ...

2020-01-30 01:28:47 391

原创 CodeForces - 1295B Infinite Prefixes(数学)

题目链接:点击查看题目大意:给出一个由0或1组成的字符串s,用来构造出字符串 t = s+ s + s....+ s,字符串 t 由无限个 s 拼接而成。现在规定cnt_0 [ i ]和cnt_1 [ i ]分别为到第 i 位为止所出现的0和1的个数,给出一个 x ,问字符串 t 中有多少个前缀满足cnt_0 [ i ] - cnt_1 [ i ] == x,若有无限个答案,输出-1题...

2020-01-30 01:22:30 3260 2

原创 Gym - 102361A Angle Beats(几何)

题目链接:点击查看题目大意:给出n个点,再给出m个询问,每次询问给出一个点 x,我们需要回答包括点 x 的直角三角形有多少个题目分析:题目比较直接,数据也比较小,支持n*n的算法处理,首先我们必须知道,如果要包括点 x 所组成三角形,那么点 x 可以在直角点上,也可以在非直角点上,比较容易想到的方法是离线处理,我们需要分类讨论,也就是上述两个情况,对于每个询问而言,以点 x 为相对原点,对...

2020-01-29 02:17:55 864 5

原创 HDU - 3629 Convex(计算凸四边形个数)

题目链接:点击查看题目大意:给出n个点,计算能组成的凸四边形个数题目分析:朴素方法是枚举四个点,n^4的复杂度,而这个题目的n给到了700,显然是不行的,既然点的个数比较大,正难则反,我们考虑组合数学,首先n个点能组成C(n,4)个四边形,我们只要减去凹四边形的个数就是答案了,我们记凹四边形的个数为ans,凹四边形,换一种说法,就是取三个点组成的三角形,问有多少个点落在三角形内,那么三角形...

2020-01-28 17:19:00 802

原创 POJ - 1584 A Round Peg in a Ground Hole(综合几何)

题目链接:点击查看题目大意:给出n个点,以及一个圆心和半径,首先判断这n个点能否构成凸包,若能,继续判断圆是否在凸包内题目分析:这个题目确实非常综合,考察了判断凸包问题,判断圆是否在凸包内,只要保证圆心在凸包内,以及圆心到每条边的距离小于等于半径即可,说到底还是考察了模板是否靠谱,不得不佩服kuangbin大神的模板真的牛,一套用下来没有一点bug,直接贴代码吧,全是模板,懒得删减,所以有...

2020-01-28 01:23:15 227

原创 POJ - 2826 An Easy Problem?!(计算几何,好题)

题目链接:点击查看题目大意:给出两条线段,问组成的容器最多能接多少雨水题目分析:既然是接雨水,那么肯定只能是漏斗状,很容易排除掉两种情况:其中有一条线段平行于x轴 两条线段不相交还有一种比较难想的情况kuangbin大神提到了,那就是封口的情况,对应就是以下三种情况:单独讨论之后,剩下的情况就一定有解了,直接按照三角形的面积计算就是答案了注意结果需要加上一个eps防止出...

2020-01-28 00:52:56 264

原创 POJ - 3347 Kadj Squares(思维+几何)

题目链接:点击查看题目大意:给出n个正方形的边长,每个正方形必须与x轴有交点,且交点必须小,还需要满足每个正方形与x的交点依次递增,在满足以上条件的前提下,将所有的正方形防止在二维平面上,现在问从x轴上方向下俯视,能直接看到哪些正方形题目分析:伪装成几何题目的思维题,用到的几何知识无非是坐标转换,更多的是思维,因为题目的要求限制了正方形摆放的方式唯一,我们可以将每个正方形抽象成一个线段,计...

2020-01-27 23:32:30 310

原创 POJ - 1696 Space Ant(极角排序)

题目链接:点击查看题目大意:现在有一只特殊的蚂蚁,它会按照以下规则尽可能长的寻找路径:不能回头 不能右转 只能逆时针行走现在给出n个点,输出最长的路径题目分析:既然是逆时针旋转,那么每次只能走极角最小的一个,每次都排序找就可以了,时间复杂度是n*n*logn,极角排序的cmp函数还是用这张图代码:#include<iostream>#include&l...

2020-01-27 22:12:26 283

原创 POJ - 3304 Segments(简单几何)

题目链接:点击查看题目大意:给出n条线段,现在问是否存在一条直线,使得所有线段向这条直线的投影存在一个共同的交点题目分析:题意有点抽象,需要转换一下,因为所有的线段向某一条直线的投影存在一个交点,那么在那条直线上,从交点位置开始,沿着垂直于直线的方向做另一条直线,会发现这条直线与n条线段都存在一个交点,也就是都相交,这样题目就转换为了是否存在一条直线,使得与n条线段都有交点因为直线也是...

2020-01-27 16:47:16 244

原创 POJ - 1556 The Doors(线段相交+最短路)

题目链接:点击查看题目大意:给出一个房间,房间内有许多墙壁(最多18堵墙),现在要从(0,5)点到(10,5)点,问最短路程是多少题目分析:若要使路程最短,肯定要在两点之间前进,这样我们可以在建好墙后,根据线段相交问题渐变,判断两个点之间是否有线段挡着,如果没有挡着,直接建边,边权为两点的直线距离,如果被挡着了,也就是存在一条线段和当前线段规范相交,则说明两点无法直接到达,则边权置为无穷大...

2020-01-27 16:41:49 229

原创 POJ - 2318 TOYS(叉积+二分)

题目链接:点击查看题目大意:给出一个盒子,由n条互不相交的线段分割为n+1个空格,现在有m个玩具的坐标,现在问每个空格内有多少个玩具题目分析:利用叉积的性质判断点在直线的哪一侧:以点在直线左侧为例,对于一个点来说,n条线段就具有了单调性,以此二分找到该点右边的直线,则就确定了当前点所在的空格了代码:#include<iostream>#include&lt...

2020-01-27 13:45:12 231

转载 (转)计算几何模板 - kuangbin

转自:https://kuangbin.github.io/2019/04/28/20190428/#more二维几何// `计算几何模板`const double eps = 1e-8;const double inf = 1e20;const double pi = acos(-1.0);const int maxp = 1010;//`Compares a double ...

2020-01-27 12:25:37 925

原创 POJ - 3581 Sequence(后缀数组)

题目链接:点击查看题目大意:给出一个数列,保证第一个数一定大于其余的所有数,现在需要让我们将其分为连续的三段,每一段独立反转后保证字典序最小,题目要求输出反转后字典序最小的数列题目分析:因为第一个数一定大于其余的所有数,所以将整个数列反转后,求排名最小的后缀数组就是第一段的答案了,因为这个性质保证了反转后的数组中最后一个数是最大的,肯定不可能是以最后一个数字为开头的后缀,只可能是以前面的数...

2020-01-26 14:39:03 281

原创 UVA - 11475 Extend to Palindrome(马拉车)

题目链接:点击查看题目大意:给出一个字符串,问若想将其变为回文串,最少需要向尾部添加多少个字母,输出添加最少字母后的字符串题目分析:问最小需要向尾部添加多少字母,换句话说就是原字符串的最长回文后缀是多少,用马拉车求出这个最长回文后缀后,把前面没有涉及到的前缀倒这输出就是答案了代码:#include<iostream>#include<cstdio> #...

2020-01-25 22:41:45 302

原创 POJ - 1226 Substrings(后缀数组+二分)

题目链接:点击查看题目大意:给出n个字符串,求出n个字符串中或者在他们翻转过来的字符串中,出现的最长公共子串的长度题目分析:说白了就是求n个字符串中的最长公共子串的变形,而这个变形也相当简单,只是需要将其翻转后的字符串一起拼接起来然后二分就是答案了注意特判n==1的情况,因为忘记特判,WA了好久。。代码:#include<iostream>#include&lt...

2020-01-25 18:22:07 268

原创 SPOJ - PHRASES Relevant Phrases of Annihilation(后缀数组+二分)

题目链接:点击查看题目大意:给出n个字符串,求出n个字符串中的最长公共子串,且该字串必须在每个字符串中出现至少两次且不能重叠题目分析:结合之前整理过的:一个字符串中两个不重叠的重复子串的最大长度 n个字符串中的出现次数大于等于k次的最长公共子串这两点的解决方法,一结合就是本题的答案了,虽然说得轻松,但是比较考验代码能力,静下心来慢慢写就好啦具体解决方法直接看我的模板博客最下方吧...

2020-01-25 17:48:19 286

原创 HDU - 5030 Rabbit's String(后缀数组+二分)

题目链接:点击查看题目大意:给出一个字符串,现在要求将其分为不大于k个连续的子串,对于每个子串求出字典序最大的子串,现在要求所有子串的最大子串的最大值最小,输出这个最大子串题目分析:最大值最小,标准的二分条件,所以我们需要想办法二分,因为最后需要的答案是子串,我们可以用后缀数组预处理出一个前缀和,表示每个后缀贡献的本质不同子串,这样我们就可以二分子串的长度,也就是二分答案了,现在问题转换为...

2020-01-25 00:42:57 382

原创 HDU - 5008 Boring String Problem(后缀数组+二分)

题目链接:点击查看题目大意:给出一个字符串,接下来给出 q 个询问,每次询问字符串中第 k 大的子串,要求输出该字串的左右端点,如果有多个答案,输出左端点最小的一个题目分析:因为在求出后缀数组后,sa数组已经保证了升序,且每个后缀中的前缀也按照升序排列,所以我们可以构造一个前缀和,因为每一个后缀贡献的不重复的子串个数为 n - sa[ i ] - height[ i ],这样就能二分找到第...

2020-01-24 20:21:00 312

原创 HDU - 6194 string string string(后缀数组+RMQ+容斥)

题目链接:点击查看题目大意:给出一个字符串和一个数字 k,问字符串中出现次数恰好等于 k 次的字串有多少个题目分析:在跑完后缀数组后,我们可以用sa数组求解,具体做法是枚举起点,找长度为 k 的sa数组的最长前缀就是出现至少k次的答案了,但是不能保证所有子串恰好出现了k次,所以我们在累加答案后再减去出现至少k+1次的答案,最后因为容斥原理还需要加上一部分,因为出现k+1次,多出来的一次可以...

2020-01-24 18:32:02 283

原创 HDU - 3518 Boring counting(后缀数组)

题目链接:点击查看题目大意:给出一个字符串,问有多少个子串出现了两次以上,计算时彼此不能覆盖题目分析:因为数据范围比较小,我们可以直接暴力,枚举子串的长度,利用height数组的性质将后缀分为不同的组,在每个组中尝试寻找答案即可代码:#include<iostream>#include<cstdio> #include<string>#i...

2020-01-24 17:10:21 253

原创 SPOJ - DISUBSTR Distinct Substrings(后缀数组)

题目链接:点击查看题目大意:给出一个字符串,求出本质不同的字串的数量题目分析:正难则反,我们可以先求出总的字串有 n*(n+1)/2 个,然后遍历一遍height数组减去所有重复的部分就是答案了代码:#include<iostream>#include<cstdio> #include<string>#include<ctime&g...

2020-01-24 14:28:04 180

原创 POJ - 3693 Maximum repetition substring(后缀数组+RMQ)

题目链接:点击查看题目大意:给出一个字符串,求出字符串中重复次数最多的连续重复子串 ,如果有多个答案,输出字典序最小的题目分析:又是一个模板题,这里放一个大佬的博客,讲的很清楚:https://blog.csdn.net/queuelovestack/article/details/53035903具体做法就是,两层for循环,第一层枚举子串的长度,第二层枚举每个位置:0 , i...

2020-01-24 14:13:05 333

原创 CodeForces - 1096D Easy Problem(线性dp)

题目链接:点击查看题目大意:给出一个字符串,每个字符都有一个权值,现在需要删除权值和最少的字符,满足字符串中不再含有子序列“hard”题目分析:线性dp,但我不会,看着题解写的,首先令dp[ i ][ 1 ]为到第 i 个字符为止,字符串中不含有字符 ' h ' 的最少花费,再令dp[ i ][ 2 ]为到第 i 个字符为止,字符串中不含有字序列 “ ha ” 的最少花费,以此类推,一直到...

2020-01-24 01:13:48 3227

原创 CodeForces - 1249C2 Good Numbers (hard version)(进制转换)

题目链接:点击查看题目大意:给出一个数n,求出一个大于等于n的“好数”,“好数”的规定是只由3的幂次之和构成题目分析:直接将n拆成三进制,然后贪心从最高位开始找等于2的位置,找到后从这个位置开始,前面的位全部置零,后面找到一个等于零的位变成一就行了,因为如果想消去这个二,而且要满足大于等于原数,那么就必须让这个二进位,既然进位就会影响到后面较高的位,依次类推,只有到了第一个等于零的位置才能...

2020-01-23 23:50:25 304

原创 CodeForces - 467C George and Job(二维dp)

题目链接:点击查看题目大意:给出n个数,现在要从中选取k段长度为m的不相交的子数列,问如何选择能使得覆盖的数之和最大题目分析:读完题之和就感觉是个dp题,但不会呀,去看了题解才会的。。因为要选取某一段的子数列之和,所以在输入的时候维护好前缀和,dp[ i ][ j ] 为到第 i 个数为止,选了 j 段后的最大值,则转移方程为:dp[ i ][ j ] = max ( dp[ i ...

2020-01-23 19:29:44 433

原创 CodeForces - 932D Tree(树上倍增,好题)

题目链接:点击查看题目大意:给出一棵树,初始时只有一个节点1,权值为0,后续有 n 个操作,每次操作分为两种情况:1 u val:向树中插入一个新的节点,其父节点为 u ,权值为 val 2 u val:询问以节点 u 为起点的最长不下降子序列的长度,这里规定的最长不下降子序列需要满足以下几个条件: 以 u 为起点,每次的路线必须都是当前节点的父节点 序列中的权值和小于等于 val...

2020-01-23 17:49:22 432 2

原创 CodeForces - 1000C Covered Points Count(差分+思维)

题目链接:点击查看题目大意:给出n个区间,现在要求输出覆盖次数为1,2,3....n-1,n的点分别有多少个题目分析:一开始看到区间问题想用线段树去做,但想了想又可以直接用差分去做,不过因为数比较大,所以用map代替差分数组,后续求前缀和的时候就可以实时维护答案了代码:#include<iostream>#include<cstdio> #includ...

2020-01-23 16:10:43 287

原创 CodeForces - 125C Hobbits' Party(思维+构造)

题目链接:点击查看题目大意:有一个派对,现在有 n 个人参加,题目要求我们构造出一种参加方式,满足条件且可以维持的天数最大:任意两天中至少有一个相同的人参加 任意三天中不能有一个相同的人参加输出最大天数并给出构造方案题目分析:一开始我想让相邻两个人互相在相邻的天数中出现,比如1 n1 22 3...n-1 nn 1但是发现这样的话第一个人会出现三次,与条...

2020-01-23 15:08:12 360

原创 CodeForces - 722C Destroying Array(倒着并查集+离线处理)

题目链接:点击查看题目大意:给出一个数列a,现在给出操作b,每次操作都会删除掉数列a中指定位置的数,问每次删除后,最大连续字段和是多少题目分析:一开始看到最大连续字段和,以为是要用dp,又看了一下题发现a数组都是非负数,这样一来最大连续字段和就取决于在经过数组b的操作后是否连续了,判断连续一开始我想用set集合维护断点的,感觉太麻烦,又想用线段树试试能不能维护区间,还是比较麻烦,想不出比较...

2020-01-23 00:45:15 227

空空如也

空空如也

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

TA关注的人

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