自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Gatevin的专栏

Another blog address: gatevin.moe

  • 博客(364)
  • 资源 (1)
  • 收藏
  • 关注

原创 SPOJ SUBLEX Lexicographical Substring Search 后缀自动机

题目大意:就是现在对于给出的长度不超过90000的字符串进行Q(Q 其中相同的子串只算一次例如“aaa"的子串是"a", "aa", "aaa"大致思路:首先对于给出的字符串建立后缀自动机, 然后利用后缀自动机的性质, 所有相同的子串一定会在同一点终止, 那么, 从根开始, 每次都选择尽量小的字符走, 首先我们可以dfs预处理出每个状态点处代表的可能向下的不同字串有多少个,

2015-04-10 15:49:00 1045

原创 HDU 4821 String (2013长春现场赛I题) 字符串Hash

题目大意:就是现在对于给出的字符串S, 找出S中有多少个长度为M*L的子串, 满足组成M*L长度的字串是有M个不同的长度为L的串拼接起来的大致思路:明摆着的字符串Hash, 预处理Hash之后对于连续的长度为L的段进行枚举即可枚举起点, 每次向后L的一段, 这样是个很常见的枚举技巧了...没什么难度代码如下:Result  :  Accepted     M

2015-04-09 22:28:11 1119

原创 HDU 4818 RP problem (2013年长春现场赛F题) 高斯消元性质利用

题目大意:就是现在一个图中100个点, 代表100个人, 每个人如果视另外一个人为朋友, 就有一条从这个人联想其他人的边, 每天每个人自己拥有的RP值要平分给所有其视为朋友的人, 同样的一个人分发RP值之后也会受到RP值, 如果这个过程不会改变RP值的分布, 则这样一个RP值的分布是稳定的, 现在所有人的RP总和是1, 对于给定的图, 计算是否存在唯一的稳定分布, 如果存在唯一的稳定分布, 那

2015-04-09 22:24:24 1500 1

原创 SPOJ LCS2 Longest Common Substring II 后缀自动机

题目大意:就是现在给出最多10个长度不超过10^5的字符串, 求这10个串的最长公共字串的长度大致思路:这是SPOJ LCS那题的升级版, 那道题我是将所有串连接起来中间用没有出现过的字符隔开然后整体建立后缀自动机然后对于每个点上状压记录Right集合当中元素的来源来做的但是这个题这么做会TLE, 虽然复杂度也是O(n)的, 但是这个题的时间限制很紧所以后来换了一个方法

2015-04-09 10:50:54 878

原创 SPOJ LCS Longest Common Substring 后缀自动机

题目大意:就是现在给你两个长度不超过25*10^4的串, 求他们的最长公共子串的长度大致思路:第一道后缀自动机的题...居然套模板一发过了....我的想法就是原本后缀自动机中不是对于你每一个状态State记录了Right集合的元素个数嘛, 那么对于两个输入的串, 中间用一个没有出现的字符隔开之后插入后缀自动机, 然后用一个变量appear状压记录当前这个状态所含有的Ri

2015-04-08 20:10:55 704

原创 Codeforces Gym 100543G Virus synthesis (Palindromic Tree + DP) 2014欧洲中部赛区G题

题目大意:就是现在初始的时候没有任何DNA链, 现在又无数个A, G, C, T这些材料无数个, 每次可以在已经有的链上选择2中操作:1. 在链的的左边或者右边加上A, G, C, T的其中一个2. 将现有的链镜像相连如AGC镜像可以变成AGCCGA或CGAAGC给出一个长度不超过10^5的目标串, 问最少需要几次操作完成这样一条链, 其实的链为空大致思路:这个题挺

2015-04-01 15:02:56 1837

原创 Codeforces Gym 100548G The Problem to Slow Down You (Palindromic Tree 或 Hash水过) 2014西安现场赛G题

题目大意:就是现在给你两个长度不超过20W的字符串, 都只包含小写字母, 求相同的回文串对数 (S, T), 其中S == T, S来自第一个字符串, T来自第二个字符串, S和T都是回文串大致思路:首先很容易想到的是Manacher + 后缀数组二分 + Hash的做法, 复杂度O(nlogn), 可惜的是这个题目Hash容易被卡试了好几次Hash之后试了一发二次Hash

2015-03-31 18:17:44 2432

原创 HDU 5157 Harry and magic string (BestCoder Round #25 D) Manacher(或 Palindromic Tree) + 前缀和

题目大意:就是现在给出一个字符串s, 长度不超过 10^5, 然后求出其中不相交的回文字串的对数大致思路:其实一眼看去就知道可以用Manacher处理出回文半径之后用前缀和解决 不过有想了一下Palindromic Tree的做法, 算是练习一下Palindromic Tree了解法一:Manacher处理出所有位置的回文半径然后计算以i位置结尾的回文串数量和以

2015-03-31 10:54:47 784

原创 SPOJ NUMOFPAL - Number of Palindromes 水题 (Palindromic Tree 练习)

题目大意:其实就是一个字符串求出其好友的回文串的数量(本质相同但位置不同视为相同)大致思路:其实就是一个水题, 给出的字符串长度 代码如下:Result  :  Accepted     Memory  :  3277 KB     Time  :  0 ms/* * Author: Gatevin * Created Time: 2015/3/30 22

2015-03-30 22:16:04 966

原创 URAL 2040 Palindromes and Super Abilities 2 (Palindromic Tree)

题目大意:对于输入的字符串s (长度不超过5000000, 只包含a, b两种字符) 如果这个字符串从左到右依次加入形成的s, 当每个字符加入时求新增加的本质不同的回文串的数量大致思路:和 URAL 1940 Palindromes and Super Abilities一样就是简单的Palindromic Tree的应用, 就是时间有些紧, 所以读入和输出需要一些优化

2015-03-30 21:52:27 728

原创 URAL 1960 Palindromes and Super Abilities (Palindromic Tree)

题目大意:就是对于给出的字符串s (长度不超过10^5), 求出且所有前缀含有的不同回文串的数量大致思路:其实就是Palindromic Tree的裸题...看懂了Palindromic Tree的结构之后这个简直不能再明显, 当做联系Palindromic Tree来做了,代码如下:Result  :  Accepted     Memory  :  1222

2015-03-30 21:47:20 659

原创 (CDOJ) UESTC 606 Palindrome Again 后缀数组二分 + Manacher + Hash

题目大意:就是现在给出两个只包含小写字母的字符串A, B, 一个正整数d, 求三元组(i, j, k)满足A[i, i + 1, .... i + k - 1] == B[j, j + 1, ... j + k - 1] , 且A[i, i + 1, ..., i + k - 1]是回文串, k >= d的三元组数量大致思路:做了2012长春那场区域赛的G题之后就会做这题了..

2015-03-29 21:42:31 841

原创 Codeforces 30E Tricky and Clever Password Manacher + KMP + 前缀和

题目大意:就是现在有一个长度为奇数的个回文串串T被加密成了 A + prefix + B + middle + C + suffix的形式, 其中 T = prefix + middle + suffix , 这六个部分可以是空的, 现在对于给出的加密后的串求原串T的最大可能长度, 其中middle长度也是奇数, preifx长度和suffix长度相等, 输入的字符串长度大致思路:

2015-03-29 12:19:55 2251 1

原创 HDU 4473 Exam 有点技巧的暴力枚举 (2012成都区域赛J题)

题目大意:就是现在定义f(x)表示满足x mod (a*b) == 0的有序正整数对(a, b)的数量, 对于给定的n, 求 f(1) + f(2) + ... + f(n)的值, (1 大致思路:首先这个题可以转换一下思路, f(1) + f(2) + ... + f(n)实际上就是满足 a*b*c 那么不妨设 a 那么可以暴力枚举a的值, 然后对于b满足 a 所

2015-03-28 22:49:58 754

原创 HDU 4468 Spy KMP + 贪心 (2012成都区域赛E题)

题目大意:就是现在对于给定的一个字符串s 长度不超过10^5, s可以表示成P1 + P2 + ... + Pk + T, T是s的后缀, P1, P2,....Pk都是T的前缀, 可以没有Pi, 也就是可以S = T现在对于给定的字符串S求出最短的T的长度大致思路:这是个很巧妙的KMP的应用的题, 还要用到贪心的思想, 首先我们初始化后缀是s[0]这一个字符, 然后拿当前

2015-03-28 22:37:01 1306

原创 HDU 4465 Candy 概率 (2012成都区域赛B题)

题目大意:就是现在有两个箱子里面都有n颗糖, 现在一个人每天选择一个箱子, 选择左边的箱子的概率是p, 选择右边箱子的概率是1 - p, 如果打开一个箱子的时候里面有糖就吃掉一颗, 否则会感到很失望然后去打开另外一个盒子, 现在一个人连续一段时间从选择的箱子里吃到糖, 在某一天是他打开箱子发现那个箱子是空的, 这天在他开另外一个箱子是时, 求另外一个箱子的剩余的糖的数量期望大致思路

2015-03-28 22:27:35 747

原创 HDU 4426 (ZOJ 3661) Palindromic Substring 后缀数组二分 + Manacher + Hash

题目大意:就是现在对于T(T 大致思路:首先用Manacher算法处理出各个字符为中心的回文半径, 然后由于一个长度为n的字符串中最多只有O(n)个不同的回文串(其实位置不同但序列相同视为相同), 所以可以再利用mx的右移来判断是否可能出现的新的回文串 ( mx 参照2014年国家集训队徐毅论文中Manacher的做法), 对于每一种回文串Hash判重即可然后对于每一种回文

2015-03-27 09:23:35 1161

原创 BZOJ 2342 [Shoi2011] 双倍回文 Manacher + set维护

题目大意:就是现在给出一个长度为n的字符串(1 大致思路:首先用manacher处理处所有字符为中心的回文半径, 然后用set维护对于每个正中心的位置查询左中心的位置即可 (论文题)细节写在代码注释里了代码如下:Result  :  Accepted     Memory  :  18264 KB     Time  :  748 ms/********

2015-03-24 10:53:38 1038

原创 Codeforces 367E Sereja and Intervals DP

题目大意:就是现在在一个长度为m的区间上找出一组区间, 这组区间要有n个并且其中任意两个区间不存在包含关系且必须存在至少一个区间其左边界的值是x(1 大致思路:就是一个dp...状态转移方程见代码注释吧代码如下:Result  :  Accepted     Memory  :  1408 KB     Time  :  140 ms/* * Auth

2015-03-23 21:57:11 1410

原创 Codeforces 366E Dima and Magic Guitar 暴力

题目大意:就是现在有一个n*m的矩阵当中所有的数都是[1~k]以内的正整数, 现在对于一串字符s, 这个s当中相邻的两个字符在n*m的矩阵当中对应的最远距离是多少(x1, y1)和(x2, y2)之间的距离定义为 |x1 - x2| + |y1 - y2|大致思路:首先可以注意到:|x1 - x2| + |y1 - y2|= (x1 + y1) - (x2 + y2

2015-03-23 18:44:22 634

原创 Codeforces 366D Dima and Trap Graph (DFS剪枝水过...)

题目大意:就是现在给你一个有n个点m条边的图(1 然后每条边上都有一个区间限制[L, R], 现在从点1出发选择一个能够到达n的路径, 对于这条路径初始的时候选择一个x如果x对于这个路径上的每一条边都满足L 大致思路:看了题解之后才发现正解是先确定左边界然后二分右边界, 不过我写的时候dfs剪枝了一下就水过了...就是dfs的时候如果当前可行区间长度已经比找到的最大长度

2015-03-23 18:35:56 773

原创 Codeforces 366C Dima and Salad 背包DP

题目大意:就是现在又n个水果, 每个水果都有两个属性值ai表示美味程度, bi表示能量值, 现在要求选出多个或一个水果, 使得选出的水果的ai和与bi和之比是k问在这种清形可能出现的情况下ai的和最多是多少, 如果这样的情形不存在输出 -1(1 大致思路:首先我们最终要满足sigma(ai)/sigma(bi) = k所以对于每一个水果记ci = ai - k*bi那么

2015-03-23 17:53:50 829

原创 Codeforces 367D Sereja and Sets 位运算暴力

题目大意:就是现在1~n这n个正整数被分成了m个不同的非空集合, 现在要从这m个集合当中选出最少数量的集合, 使得对于给定的d, 选出的集合中的所有数从小到大排列之后满足对于[1, n]这个区间当中任意长度为d的连续子区间当中都至少有一个数在选出的集合当中 (1 大致思路:记录下每个数出现在第几个集合当中然后遍历一遍[1, n], 对于其中所有连续的长度为d的连续子区间都记录一

2015-03-23 17:45:14 962

原创 BZOJ 2565 最长双回文串 Manacher

题目大意:定义双回文串G是指一个可以被拆分成两个部分(S和T)的字符串G = S + T, 且S和T都是回文串的串, G自己本身可以不是回文串给出一个长度为n ( 2 大致思路:首先可以相当manacher算法当中有这样一个过程, 用两个辅助变量mx和p分别表示已有回文半径覆盖到的最右边界和对应中心的位置, 然后在求解过程中更新mx和p, 考虑到S和T的中间字符作为分隔的位

2015-03-20 22:03:48 2042

原创 Codeforces 17E Palisection Manacher ( 或 Panlindromic Tree ) + 前缀和

题目大意:就是现在给出一个长度为n的字符串( 1 大致思路:继续刷manacher的论文题... 刚开始看到这个题的时候我想的是觉得可以正面做, 然后发现逗比了...因为我对于每一个以 i 位置为中心的半径为R[i]回文串只算了一次, 错以为可以树状数组弄一下...然后逗比地美国样例之后发现, 以 i 为中心的回文串有R[i]个( i 处不是 '#' 的情形下)...然后看

2015-03-20 20:41:37 1405

原创 BZOJ 2160 拉拉队排练 Manacher + 前缀和

题目大意:就是现在给出一个长度为 n 的字符串(1 对于给出的长度为n的字符串如果其回文串的数量比K少则输出-1, 否则输出所有回文串中长度为奇数的最长的前K个回文串的长度的乘积, 结果对于19930726取模输出大致思路:首先可以用manacher算法确定每个位置的回文半径, 由于这里只需要长度是奇数, 所以不需要再原来的字符串的相邻两个字符之间插入未出现的字符, 直接在

2015-03-20 18:53:16 1564

原创 Codeforces 452E Three strings 后缀数组 + 并查集

题目大意:就是现在给出三个总长度不超过3*10^5的字符串, 每个字符串只包含字母'a' ~ 'z', 现在对于每一个L, (1 大致思路:首先不难想到后缀数组处理三个串拼接起来的总串, 记录每一个字符的来源, 也就是记录每个后缀的来源, 然后需要根据height数组从大到小来利用并查集标记区间进行计算, 注意两个区间合并的时候之后 (i, j, k)三者不来自同一个原来的区间

2015-03-18 18:33:33 1035

原创 HDU 4447 Yuanfang, What Do You Think? 多项式分解

题目大意:就是现在对于给定的多组数据, 对于每组的n (1 例如 x^2 - 1 = (x-1)(x+1)x^3 - 1 = (x-1)(x^2+x+1)x^4 - 1 = (x-1)(x+1)(x^2+1)...输出顺序按照多项式从小到大输出,(多项式大小比较先比较长度, 然后高次项到低次项比较系数的绝对值, 如果绝对值相同则负的较小大致思路:这个题是看了

2015-03-18 15:29:49 1333

原创 HDU 4445 Crazy Tank 枚举角度

题目大意:就是现在给定炮台高度H, 友军坦克区间[L2, R2], 敌军坦克区间[L1, R1], 现在又N发炮弹以各自的速度从炮台出射出, 可以自由调整炮台角度但是所有炮弹的角度必须一致问在没有炮弹掉进友军坦克所在区间的条件下击中敌军坦克区间的炮弹做多能有多少个大致思路:刚开始想的是枚举哪个炮弹击中区间的某个边缘然后计算角度, 然后发现计算量很大, 而且精度可能有问题,

2015-03-18 12:44:38 630

原创 HDU 4443 Lost 树形概率DP

题目大意:就是现在给出一个有且仅有一个环的图, 顶点数大致思路:很容易考虑到将环拆开成之多30个在树上做概率DP, 不过细节真的很多, 很容易出错, 细节见代码注释代码如下:Result  :  Accepted     Memory  :  8660 KB     Time  :  280 ms/* * Author: Gatevin * Create

2015-03-16 19:47:34 583

原创 2015武汉大学第八届Eming杯现场赛E题题解

2015年武汉大学第八届Eming杯现场赛E题题解

2015-03-15 19:22:28 1030

原创 UVALive 5794 (UVA 12361) File Retrieval 后缀数组 + 分治dfs

题目大意:就是现在给出F(1 大致思路:首先不难想到将F个串中间用未出现的不同字符隔开连接起来, 然后处理出后缀数组, 然后我们可以用后缀树的样子来看这些后缀之间的关系(后缀树组作为工具), 不能发现如果某一段连续的极大区间[L, R]中的height值都 >= h(也就是这个区间旁边的 < h),那么我们对于后缀sa[L - 1], sa[L], .... sa[R]的前 <

2015-03-12 20:07:53 892

原创 ZOJ 3199 Longest Repeated Substring 后缀数组 + RMQ预处理

题目大意:给定多个长度不超过50000的字符串, 求最长的重复子串的长度, 最长重复子串s定义为, 在s出现之后紧跟这又出现一次的串(两次出现相邻但没有交集)大致思路:很容易想到用后缀数组来做, 从长到短枚举长度即可, 由于长度为L的串必定覆盖s[0], s[L], s{2*L]...s[k*L]中的恰好一个, 所以就可以用一个很常见的枚举来O(nlogn)解决这个问题了细

2015-03-10 17:09:39 698

原创 Codeforces 387E George and Cards 树状数组 + 集合set查询

题目大意:就是现在有n章卡片的排列p1, p2...pn, 每张卡片上写着1~n, 现在George进行n - k次remove的操作, 使得最后只剩下的牌为b1, b2...bk, 每次remove操作可以选择一段连续的区间x1, x2...xw, 然后从中移除最小的那个, 注意移除最小的那个之后剩下的卡片保持连在一起, 完成这样一次操作会得到w份香肠, 为了使最后剩下的牌的排列为b1, b

2015-03-10 15:51:46 721

原创 HDU 4455 Substrings 树状数组 + DP

题目大意:就是现在给出一个长度不超过10^6的数组, 数组中的每个数1 大致思路:思路都在代码注释里了..第一次写树状数组...代码如下:Result  :  Accepted     Memory  :  29060 KB     Time  :  1840 ms/* * Author: Gatevin * Created Time: 2015/

2015-03-10 11:48:20 589

原创 HDU 4436 str2int 后缀数组 + 前缀和预处理 或 后缀自动机

题目大意:对于给出的n个字符串(n 例如串"101"子串有 1, 10, 101, 0, 01, 1, 对应的不同整数是1, 10, 101 (0对求和没有影响, 可以略去)大致思路:首先第一眼看得出和后缀数组有关, 但是将所有的串连接起来之后, 有一些计数上的细节需要考虑, 首先如果后缀以'0'开头则不需要加入计数(这样的后缀的所有子串对应的整数一定会在其他的后缀当中出现

2015-03-09 21:52:37 975

原创 Codeforces 335C More Reclamation 博弈

题目大意:就是现在有一条宽度是2的河流, 已经有一部分被占用为陆地了, 现在两座城市轮流来占用河流的一部分土地, 一条河不能被封堵住(第a行第1列和第a + 1行第2列被封住也算封死), 在这个前提下双方轮流选择, 知道一方不能选择为止, 最后下手选择的人赢, 也就是轮到谁而那个城市没有选择余地的时候那个城市输大致思路:首先可以将连续的没有被占用过的行作为一段来考虑, 那么这样

2015-03-05 12:37:37 649

原创 Codeforces 337D Book of Evil 树状DP 或 BFS找子树直径端点

题目大意:就是现在对于一个n个点的树 (1 大致思路:这个题试了两种解法, 第一种是官方题解的树状DP, 另外一种是比较巧妙的转化成树的直径端点相关的问题细节都写在代码注释里了, 详情见代码吧代码如下:解法一: 树状DP解法Result  :  Accepted     Memory  :  7504 KB     Time  :  216 ms/*

2015-03-04 22:12:20 1207

原创 Codeforces 335D Rectangles and Square 暴力 + DP

题目大意:给定n个矩形(1 每个矩形给出其左下角坐标和右上角坐标, 坐标(x, y)满足(0 求是否存在一个正方形,这个正方形刚好是这n个矩形中的某些所拼凑起来的,(拼凑不能有缝隙), 如果有就找出这样的一组矩形, 否则输出NO大致思路:这题感觉dp还是有点巧妙的, 再就是巴黎枚举每个矩形的左下角是否是要找的正方形的左下角, 利用预处理好的数组来判断是否能继续增加边长

2015-03-04 15:29:23 1092

原创 Codeforces 337E Divisor Tree 暴搜

题目大意:就是现在给出最多8个数(2 大致思路:就是一个平常的暴搜问题, 细节和注意的地方写在代码注释里了, 具体看代码吧代码如下:Result  :  Accepted     Memory  :  4 KB     Time  :  30 ms/* * Author: Gatevin * Created Time: 2015/3/3 21:06:1

2015-03-03 21:53:24 908

后缀自动机算法代码 C++

后缀自动机C++实现, 将后缀自动机写成了结构体, 配有详细的注释内容

2015-05-09

空空如也

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

TA关注的人

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