自定义博客皮肤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

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

原创 FZU 2137 奇异字符串 后缀数组

题目大意:就是现在跟定一个字符串长度不超过10^5, 求其所有子串中奇异字符串的价值和奇异字符串的定义为形似AxA的串, x是一个字母, A是非空字符串, 且A中没有x出现, 其价值是长度的平方大致思路:首先这个题不要想复杂了, 暴力即可, 想处理出后缀数组, 然后枚举x的位置, 之后从x想两边扩张, 遇到边界或者x时停止, 对于每一次枚举都直接利用后缀数组的预处理查询LC

2015-05-28 18:29:56 660

原创 HDU 5069 Harry And Biological Teacher AC自动机 + 线段树优化 (BestCoder Round 14 D)

题目大意:就是对于给出的n个字符串(n 大致思路:首先这个题可以用AC自动机或者后缀自动机来做, 我使用的是AC自动机, 将输入的所有串建立一个AC自动机, 对于每一个串A的后缀和串B的前缀进行匹配, 其实就是串A在AC自动机上结尾的点的位置沿着fail指针向上走能够走到的与串B在AC自动机上匹配时经过的位置, 那么我们对于所有B相同的询问一起处理, 也就是现将所有的AC自动机

2015-05-28 15:44:45 1274

原创 ACdream 1430 SETI 后缀自动机

题目大意:就是对于给定的串S, 长度不超过10000, 求出其有多少种子串T, 使得T在S中至少不重叠地出现了2次以上大致思路:很明显的后缀自动机吧, 建立S的后缀自动机, 记录每个节点对应的串出现的最左和最右位置, 以及出现次数, dfs遍历一遍后缀自动机上的点即可了细节见代码吧代码如下:Result  :  Accepted     Memory  :

2015-05-20 21:02:56 835

原创 HDU 4117 GRE Words (AC自动机 + 线段树优化DP) 2011年成都现场赛G题

题目大意:就是现在给出n (n 大致思路:首先不难想到建立n个串的AC自动机, 用dp[i]表示最终剩下的串以第i个串结尾的的方案中权值和的最大值那么dp[i] = max(dp[j] + w[i]) 1 显然如果这么直接dp的话讲所有穿建立自动机然后遍历, 直接DP时间复杂度是O(n*n + 2*m), m是字符串总长度那么由于n的限制, 这个方案是不接受的于

2015-05-20 20:02:22 1819 3

原创 HDU 1538 A Puzzle for Pirates 海盗分金问题

题目大意:就是现在n个海盗分配m枚金币, 依次编号为P1~Pn然后海盗按照Pn->P(n - 1)->...->P2->P1的顺序提出分配方案, 然后或者的海盗投票表示是否赞成这个方案, 提出方案的海盗也会参与投票, 如果有一半或者以上的海盗赞成, 那么这个方案就通过, 按照这个方案分配金币, 否则这个海盗会被扔进海里喂鲨鱼, 各个海盗都决定聪明并且想使得自己的利益最大化, 当然这里各个海

2015-05-14 23:18:58 739

原创 ZOJ 3545 Rescue the Rabbit AC自动机 + DP (2011大连区域赛G题)

题目大意:就是现在给出n个字符串(n 如果为负数就输出那个字符串大致思路:就是明显的AC自动机上的DP, 建立好AC自动机后, 用dp[i][j][k]表示当前长度为i , 在AC自动机的点 j, 装药表示的包含状态为k的方案是否可行, 初始化dp[0][0][0] = true状态转移方程为dp[i][next[j][c]][k | end[next[j][c]]]

2015-05-14 22:57:58 1105

原创 HDU 2486 (HDU 2580, POJ 3922) A simple stone game K倍动态减法游戏

题目大意:就是现在有一堆石子, 然后先手第一次取走任意数量(至少1颗, 不能取完), 然后双方轮流拿石子的时候, 拿走的数量不能超过上一次被拿走石子数的K倍, 拿走最后一颗石子的人获胜, 给出n, k, 求出先手是否必败, 如果必胜, 则输出第一次应该拿走的最少数量大致思路:首先可以参考2009年国家集训队冬令营论文 : 《从"k"倍动态减法游戏"出发探究一类组合游戏问题》

2015-05-11 19:38:11 954

原创 HDU 1517 (POJ 2505) A Multiplication Game 简单博弈

题目大意:就是现在初始 p = 1, 然后两个人轮流进行操作每次可以把p 乘上2~9中的任意一个正整数, 先把 p变成 >= n的人获胜大致思路:首先不难发现对于点k, k >= n的都是P点, 那么所有能到达P点的都是N点, 所以[n / 9, n - 1]是N点, 当然这里n / 9向上取整, 所以写代码的时候注意一下, 那么接下来一段只能到达N点的是P点, 所以[n /

2015-05-09 11:35:16 781

原创 HDU 2177 取(2堆)石子游戏 Wythoff Game 求第一步方案

题目大意:就是Wythoff Game, 但是判断胜负之后还要输出方案大致思路:首先了解到Wythoff Game的性质:可以参考 HDU1527对于每一种方案讨论下一步可能走到的P点位置就行了, 细节问题看代码注释吧, 写的很详细了代码如下:Result  :  Accepted     Memory  :  1580 KB     Time  :  

2015-05-08 16:20:30 676

原创 HDU 1527 (POJ 1067) 取石子游戏 Wythoff Game

题目大意: 就是Wythoff Game的原型, 每次可以拿其中一堆的任意数量或者两堆同时拿一样的任意数量, 拿走最后一颗石子的人胜大致思路: 首先可以参考这篇Wythoff Game的论文: Wythoff Game 其中提到了一个Beatty Theorem(贝蒂定理): 如果a和b都是无理数,且1a+1b=1,那么{⌊a⌋,⌊2a⌋,⌊3a⌋...}和{⌊b⌋,⌊2b⌋,⌊3b⌋..

2015-05-08 11:25:57 799

原创 UVA 1462 or UVALive 4769 Fuzzy Google Suggest Trie树上的dfs 2009年哈尔滨G题

题目大意:就是现在给出至多30W个长度不超过10的串, 然后对于m 模糊匹配S和T的距离S和T的距离是有S变成T需要进行的最少操作数, 一次操作可以是将S删去一个字符或者插入一个字符或者将其中某个字符替换成其他字母大致思路:就是对于30W个串建立Trie树之后进行dfs搜索就可以了刚开始在UVALive上交一直Runtime Error... 实在找不到错误了之后去

2015-05-07 21:12:57 1091

原创 HDU 2176 取(m堆)石子游戏 简单Nim游戏

题目大意:就是HDU 1580 换了一个方式问一下而已大致思路:一样的盘Nim和是否是0, 和是否取某一堆有解取决于其和其他堆的异或和的大小代码如下:Result  :  Accepted     Memory  :  2360 KB     Time  :  140 ms/* * Author: Gatevin * Created Time: 201

2015-05-06 21:28:35 629

原创 HDU 1850 Being a Good Boy in Spring Festival 基础Nim博弈

题目大意:就是Nim游戏从SG != 0的点向 = 0的点有几种走法大致思路:如果想改变第 i 堆使得SG = 0, 那么第 i 对要变成其他堆的SG和的数量, 于是判断一下大小就可以了代码如下:Result  :  Accepted     Memory  :  1576 KB     Time  :  0 ms/* * Author: Gatevin

2015-05-06 20:25:02 511

原创 HDU 2149 Public Sale 巴什博弈

题目大意:就是最简单的巴什博弈...大致思路:对个解的情况就是走的步数多余上限的情况否则就控制位置在(能走的最大步数 长度+ 1)倍数的位置代码如下:Result  :  Accepted     Memory  :  1576 KB     Time  :  0 ms/* * Author: Gatevin * Created Time: 201

2015-05-06 20:15:49 562

原创 HDU 2188 悼念512汶川大地震遇难同胞――选拔志愿者 巴什博弈

题目大意:中文题目不说大意了...大致思路:最最基本的巴什博奕的模型了, n % (m + 1) == 0时先手败, 否则先手胜代码如下:Result  :  Accepted     Memory  :  1576 KB     Time  :  0 ms/* * Author: Gatevin * Created Time: 2015/5/6 19

2015-05-06 20:03:13 618

原创 UVALive 3703 (LA 3703) Billing Tables Trie树

题目大意:感觉这就是个坑题意的题吧....看了好久没看懂题意是要干什么, 后来看了一份AC代码之后终于明白题意了注意到给出的Billing Table是从上到下进行查找然后找到路线的, 也就是说原本一个电话号码对应查找前缀按照给出的顺序一个一个匹配, 遇到匹配的就接入那条线那么僵这个Table重新编排一下, 使得结果是字典序顺序的, 并且其中任意一个不是另外一个的前缀, 也就是要表最小

2015-05-06 19:52:53 983

原创 HDU 3863 No Gambling 简单博弈

题目大意:就是两个人各自连各自的点, 不能交叉, 谁连接成自己需要的上下或者左右连通 就赢了大致思路:由于图完全对称, 无论是哪一方想要完成自己的任务或者干扰另外一人都是先手有优先优势, 先手一定胜代码如下:Result  :  Accepted     Memory  :  1572 KB     Time  :  15 ms/* * Author: G

2015-05-06 17:18:35 1157

原创 UVALive 5913 (LA 5913) Dictionary Size Trie树计数

题目大意:就是现在给出至多10^4个字符串每个长度都在1~40之间, 只包含小写字母, 问如果将其中任意一个串的前缀或者是任意一个串的后缀连接起来可以构成一个新词, 那么包括这些词本身在内一共可以形成多少个不同的词大致思路:这个题感觉还是挺巧妙地利用了Trie树来计数, 首先我们将所有的n个串插入到一个Trie树中, 然后将所有串倒过来插入到另外一个Trie书中, 那么trie

2015-05-06 12:37:24 958

原创 BZOJ 2555 SubString 后缀自动机

题目大意:如题面所述, 在线状态下接受添加字符和查询某个字符串出现的次数加上了一些加密的条件使得被迫在线查询大致思路:就是后缀自动机的裸题吧=_=没什么特别的, 直接贴代码好了, 不懂的看代码细节吧代码如下:Result  :  Accepted     Memory  :  140140 KB     Time  :  6044 ms/* * A

2015-05-05 18:35:06 628

原创 HDU 4552 怪盗基德的挑战书 (KMP + DP) 或 后缀数组

题目大意:和HDU 3336简直一模一样啊.....大致思路:就是KMP + DP 或者后缀数组都可以做...细节见这个吧: HDU 3336题解一模一样不吐槽了...代码如下:Result  :  Accepted     Memory  :  2448 KB     Time  :  15 ms/* * Author: Gatevin * C

2015-05-05 10:36:15 599

原创 HDU 4691 Front compression 后缀数组

题目大意:就是按照题目给出的压缩方式计算初始的数据长度和压缩后的数据长度大致思路:其实就是相当于对于N次询问要查询后缀l1, 后后缀l2的最长公共前缀, 注意l1 == l2的时候直接判就行了然后就是之一公共长度的位数也会影响结果, 例如10这个要占两个空间代码如下:Result  :  Accepted     Memory  :  12636 KB  

2015-05-05 10:20:34 650

原创 HDU 3518 Boring counting 后缀自动机

题目大意:就是对于给出的字符串S, 长度不超过1000, 求其中本质不同的子串的数量, 这些子串满足在字符串S中出现了至少不重合的2次大致思路:如果将S建立后缀自动机的话, 记录每个节点处的串最早一次和最后一次出现的位置, 然后状态 t 处的字符串长度为[Min(t), Max(t)]比较其和rightmost - leftmost 的大小即可知道这个状态下有多少满足条件的串

2015-05-05 09:33:57 830

原创 HDU 3951 Coin Game 简单博弈

题目大意:就是现在有N个硬币摆成一个圈, 每次可以取连续的1~K个硬币, 谁取走最后一个就胜利, 注意硬币的位置不变, 也就是说如果1-2-3-4中2被拿走了, 1和3不算连续大致思路:其实就是一个简单的分析首先不难发现如果K = 1, 根据N的奇偶判断即可如果K >= 2的话, 当N 当N > K时, 如果先手一定不能一次拿走全部的硬币, 那么假设先手拿走一定数量

2015-05-04 22:51:16 625

原创 HDU 3537 Daizhenyang's Coin (Mock Turtles 游戏)

题目大意:就是现在有一些放成一排, 其中有一部分正面向上, 一部分反面向上, 每次可以选择1~3个硬币进行翻转, 选择翻转的硬币中最右边的那个必须是原本正面朝上的谁不能翻转了就输了问谁会获得胜利大致思路:其实这个问题是翻硬币的游戏当中经典的问题之一首先需要知道这样一个事实:如果现在又1~n个硬币有的正面朝上有的反面朝上, 每次只能翻转一个正面朝上的硬币然后可以选

2015-05-04 20:26:16 1094

原创 HDU 3336 Count the string 后缀数组 或 (KMP + DP)

题目大意:就是现在给出一个长度不超过20W的字符串S, 对于这个字符串求其所有前缀在串中出现次数的和, 结果对10007取模大致思路:很容易想到后缀数组, 找到sa[i] = 0的那个就是串S, 那么找出这个位置向两边能扩展到的长度即可, 就是利用一下height数组就行了, 没什么难度= =还是不清楚的话看代码细节吧代码如下:Result  :  Acce

2015-05-04 18:17:31 824

原创 HDU 5008 Boring String Problem 后缀数组

题目大意:就是给出一个字符串(长度不超过10W), 接着Q次询问, 对于每次询问要找到第K小子串, 注意这里的字串是本质不同的子串, 大致思路:由于Q可以达到10^5 使用后缀自动机的话容易超时, 于是需要使用后缀数组, 对于给出的字符串求出后缀数组之后利用height数组处理出前i个分支下有多少个不同的子串, 那么对于每次询问二分查找即可, 由于每次回答的[l, r]中l药最

2015-05-04 15:56:03 739

原创 HDU 3389 Game 阶梯博弈

题目大意:就是现在给出一些盒子依次编号从1到n, 每个盒子中有一定的卡片, 然后每次可以选择将B中任意数量的卡片放进A中, 其中A, B满足 (A + B) % 2 == 1 && (A + B) % 3 == 0, A 轮到谁但是没有可移动的牌那个人就输了, 问谁会获得胜利大致思路:首先这个题需要了解一下阶梯博弈:一个简单的阶梯博弈的模型:现在有编号1~n的n级阶

2015-05-03 18:48:23 843

原创 HDU 3032 Nim or not Nim? Lasker's Nim

题目大意:就是现在初始有多堆石子, 每次可以将任意一堆拿走任意个或者将这一对分成两堆(不为空), 拿走最后一颗石子的人胜利问谁会获得胜利大致思路:这个是Lasker's Nim 的模型, 我是打表找出SG函数的规律做的...SG[4*k + 1] = 4*k + 1;SG[2*k + 2] = 4*k + 2;SG[4*k + 3] = 4*k + 4;SG

2015-05-02 09:37:42 718

原创 HDU 4787 GRE Words Revenge 分块式在线AC自动机 2013年成都现场赛G题

题目大意:就是现在有n次操作, 每次操作提供一个字符串或者询问一个字符串中有多少个字串是在之前提供的串中出现过的, 其中还有一个L表示旋转操作就是为了使得这个问题在线操作每组数据提供的串的总长度不超过10万, 询问的字符串 总长度不超过500万大致思路:如果不是在线的话很明显可以用AC自动机来做, 但是由于L的原因强制在线, 而对于每一次插入新串都进行一次AC自动机的建立是

2015-05-01 16:16:37 774

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

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

2015-05-09

空空如也

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

TA关注的人

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