自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

aozil_yang的博客

点滴记录,记录成长,帮助你我!

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

原创 UVA - 11468 Substring (AC自动机 + 概率dp)

题意:给出一些字符和各自对应的选择概率,随机选择L次后将得到一个长度为L的随机字符串S(每次独立随机)。给出K个模板串,计算S不包含任何一个模板串的概率(即任何一个模板串都不是S的连续子串)。思路:多模式匹配,显然的Ac自动机, 每个字符都有一个概率, 就是很显然的自动机 + dp了令dp[i][j] 表示构造字符串的第i 位, 在自动机节点j 不包含病毒串的概

2017-08-31 21:16:30 287

原创 Gym - 101190E Expect to Wait(数形结合 , 二分, 查分)

题意:告诉你n 个操作过程, + 代表 在t 时刻来了k 个车,  - 代表在t 时刻 来了k 个人,  每个人都要开走车, 没车的话 一直在队列里等, 告诉你每一天开始有多少辆车, 求所有人的等待时间总和, 如果有人拿不到车就输出 inf。思路:数形结合的思想。n 个操作可以分成n-1 段, 记录每一段的人和 等待时间。那么一开始有x 辆车的话, 那么只需要将大于x

2017-08-30 09:38:41 635

原创 HDU 4758 Walk Through Squares (AC自动机 + 状压dp)

题意:给你一个矩阵, 给你两个串, 问你从左上角走到右下角的路径中,包含这两个串的路径的方案数。思路:就是路径必须要匹配两种串。可以考虑自动机上 状压。很容易想到的是dp[i][j][k][l][m]表示走第i 步, 在自动机j 结点, 目前有k 个D, l 个R, 包含两个串的状态为m的方案数。但这样无论是 空间上 还是时间上 都无法承受。那就只能把第一维删掉了

2017-08-29 12:02:10 412

原创 HDU 2825 Wireless Password (AC自动机 + 状压dp)

题意:给你m(m 思路:很像那种 构造一个串  不包含m 个串的方案数那种 , 但这种是包含。 这个题串很小, 最多10个, 因此可以考虑状压dp。那么很好想到了。令dp[i][j][k] 表示目前构造串的第i 位, 在自动机 j 结点,  m 个串中选择的状态k 的方案数。很好转移, 大家自己想想把。不过写完之后TLE了。= =然后就加了一堆小小优化。

2017-08-28 12:01:06 383

原创 HDU 3341 Lost's revenge (AC自动机 + dp[优化好多= =])

题意:给你n 个DNA 串,  最后给你一个匹配串, 问你匹配串随便排列后 最多能匹配多少DNA串?思路:一个串匹配多个串, 是AC自动机。考虑dp因为是随便排列, 因此就得考虑 用x1 个A, x2 个C, x3 个G, x4 个T 能匹配多少个串, 这样不会有顺序问题。刚开始考虑的是 dp[i][j][k] 表示构造串的第i 位, 目前在自动机的j 结点,  ACGT数

2017-08-28 08:48:14 415

原创 UVA - 1326 Jurassic Remains (折半搜索)

题意:给你n 个串(仅包含 大写字母), 要求选择尽可能多的串,使得 所有的字母出现次数均为偶数次。思路:真的蜜汁题意, 比赛结束都没读懂。。。。18s 时间很充足, 2^24 直接爆可以过。。记录一下 折半搜索。总共24个串, 暴力是2^ 24我们可以先枚举前一半,把前一半的答案 存起来。  在枚举后一半 , 直接看对应的答案是否存在即可。对于这个

2017-08-27 21:45:37 295

原创 HDU 6161 (2017多校9 - STL模拟 + dp)

题意:给你一个n (n 1. 查询经过节点x 的最大权值链。2. 改变x 的权值为v思路:n是1e8,没法建树。但他是一个完全二叉树,一条链就log n 个点。那么我们每次修改权值时 , 维护一下这条链的信息。 那么我们只需要n log n 的空间就足够了。所有 我们令dp[x]表示 从x 往下走 最大权值是多少。val[x]表示 x 这个点权值

2017-08-25 08:06:59 472

原创 HDU 2296 Ring (AC自动机 + dp[类似于背包])

题意:给你m 个喜欢的串, 每个串都有一个权值, 一个字符串的权值为 每个喜欢的串的权值 乘以 出现次数。 问你长度为1~n 的字符串中 权值最大的串是什么, 权值一样输出长度最短,长度一样输出字典序最小。思路:匹配多种串, 显然ac自动机。答案要求权值最大, 权值一样长度最小, 长度一样 字典序最小。 显然是那种类似于背包的套路。 用int dp[][] 记录答案, string

2017-08-24 09:42:20 391

原创 HDU 1625 Censored! (AC自动机 + 大数 + dp)

题意:给定你n 种字符, 和p 个禁止串, 问你长度为m 的串有多少种 不包含 禁止串?思路:AC自动机是显然的。矩阵快速幂也可以 ,dp 也可以。但是这是个大数。  极限答案有85位左右。我用快速幂写了一发,不是爆内存就是因为内存开的过大 小样例都出不来。只能考虑dp了。dp 状态很好想:令dp[i][j] 表示目前走 第i 位长度, 在自动机上j 节点的方案

2017-08-24 08:25:27 343

原创 UVA 10075 Airlines (Floyd + 数学转换)

题意:告诉你n个点的经度 和 纬度, 告诉你m 个有向边, q 个查询 ,求两点的最短路。思路:显然裸floyd就是这个两点之间距离比较恶心了。我们直接以球心为圆点, 建立XYZ直角坐标系。球心连接 经度 0 的位置。  然后就好求 任意点的xyz 坐标了。假设纬度 是wd(弧度), 经度是jd(弧度)那么X = R * cos(wd) * cos(jd)

2017-08-23 18:50:14 268

原创 HDU 6166 Senior Pan (2017多校9 - Dijkstra + 二进制枚举 [神题])

题意:给你一个有向图, 告诉你选择的K个点, 问这K个点中最近点对 的最短路是多少?思路:大开脑洞一个题目。。。假设我们能够把K个点分成两个集合的话, 我们一遍Dijkstra 就可以求出两个集合的最近距离。求完这两个集合后, 那么两个集合中除了最近点对外, 其余点对都不用在算了, 因为都不如这个最近点对最优。因此 如和合理的划分集合是关键。因为每一个点的数值都是不同的

2017-08-22 21:44:44 1195

原创 HDU 6162 Ch’s gift (2017多校9 - 树链剖分 + 线段树)

题意:给一棵树, q 个查询,每个查询 输出 一条链中  点权 在指定范围内的  加和。思路:链中的操作,显然是用树链剖分。但是有个很难处理的问题, 如和求一个链中的 点权 在制定范围内的加和。用线段树就可以了。维护区间内最小值,最大值, 和 总和。如果区间最小值, 最大值 都在范围内,那么肯定整个区间都在制定范围内了, 就不用在向下找了。如果区间 最大值 小于制定

2017-08-22 20:07:00 573

原创 ZOJ 3228 Searching the String (AC自动机)

题意:给你一个模板串, 和n 个要匹配的串, 匹配串有两种类型, 第一种 可以在模板串中 重叠 出现, 另一种不可以重叠, 问每个串的两种形式 所出现的数量。思路:很明显ac自动机。我们先把所有匹配串插到自动机中, 第一种很简单 ,可以重叠出现, 直接循环一边模板串, 不断的走fail 指针 , 找到一个 加一个就行了。不可重叠也很简单, 直接在开一个last数组 ,表示这个单

2017-08-22 09:44:06 384

原创 UVA 11354 Bond (最小生成树 + 树链剖分)

题意:给你一个图, q 个查询, 每个查询输出两点之间 的路径中 最大值的最小值。思路:要想路径最大值最小, 边肯定在最小生成树上。先把图建成最小生成树。那么问题就是  输出树上两点之间的 边权最大值。赤裸裸的树剖。可惜比赛时脑残没有想到 最小生成树。#include #include #include #include using namespac

2017-08-21 17:41:43 264

原创 UVA - 12083 Guardian of Decency (匈牙利算法 求 最大独立集)

题意:给你 n 个人的 性别 身高, 喜欢的运动和音乐。 告诉你一些两个人能在一起的条件, 问 最多多少人 在一起?思路:有性别之分。可以建成一个二分图。然后反向建边, 如果男i 和 女j 不能再一起 就连一条边。然后这样, 二分图的最大独立集 就是 答案。 所有人都不连边, 所有人都可以在一起。总数 - 最大匹配数 即是答案。#include #include

2017-08-21 16:27:10 331

原创 HDU 2243 考研路茫茫——单词情结 (AC自动机 + 矩阵快速幂)

题意:给你n 个非法串, 求长度为1~m 的串 至少包含一个非法串的个数。思路:经典AC自动机问题。和POJ 2778 是一样的。我们可以先求 长度为1~m 不包含非法串的个数。求长度为m 的串种类数 是矩阵的m 次方。这里就是  A^1 + A ^ 2 + A ^ 3.... + A^m倍增法求矩阵和 或者 构造一个大矩阵在求和都行。如和构造矩阵  看那一篇文

2017-08-21 08:18:53 386

原创 HDU 4511 小明系列故事——女友的考验 (AC自动机 + dp)

题意:给你n个点, 你在1号点, 要到n 号点, 有m 种路径不能走, 求1到n 的最短路长度。思路:m 种路径不能走, 很容易想到AC自动机。 求距离最短。还是将m 种路径建立成自动机,  一个结点非法, 不仅他是m 种路径的末尾,还包括m 种路径子串的话 也是非法的。我们令dp[i][j] 表示在 目前在i 点, j 状态的最短距离。(j 为自动机上的结点)那么转移就很

2017-08-20 13:08:54 354

原创 POJ 2778 DNA Sequence (AC自动机 + 矩阵快速幂)

题意:给你n个病毒串, 要求组成一个长度为n 的字符串, 使得字符串中不包含 病毒串, 求字符串的方案数。思路:先给n 个病毒串 建立AC自动机, 标记处病毒节点来。然后构造一个矩阵。a[i][j] 表示从i 节点 到 j 节点 走一步的方案数。那么根据离散知识(听别人说的= =)矩阵的n 次方就是 i 到 j 走n 步的方案数。那么答案就是 a[0][0] + a

2017-08-19 22:11:47 308

原创 HDU 2457 || POJ 3691 DNA repair (AC自动机 + dp)

题意:给了你n 个病毒DNA串, 和一个模板串, 要求模板串上改尽量少的字符 使得 模板串不包含 病毒串。思路:AC自动机 + dp多个串匹配,  很容易想到是AC自动机, 然后又是改少的字符,  也比较容易想到 dp 上。令dp[i][j] 表示 使模板串前i 个字符 在自动机的j 节点,不包含病毒串 的最小修改数量。那么我们直接枚举第i-1 个字符所在的节点, 然后向下

2017-08-19 09:44:08 256

原创 HDU 3065 病毒侵袭持续中 (AC自动机)

思路:也是个ac自动机裸题给每个节点维护编号 和数量就好。 因为一个节点可能会重复匹配一个病毒多次,  所以不能清空维护的数量。#include #include #include #include #include using namespace std;const int maxn = 50000 + 10;int ans[maxn];struct Trie

2017-08-18 08:22:57 266

原创 HDU 2896 病毒侵袭 (AC自动机)

思路:ac自动机裸题。虽然输出是乱搞, 但也得注意一下时间。输出一开始建立了1000 个set 来保存答案。 但是T了。所以必须只用一个数组 来简单优化一下。但是数组还有重复的问题,  在自动机中加个标记 ,标记了之后就不存了 就可以了还有一个很恶心的  是 数组开小了 返回我的 是wa  。。。#include #include #include

2017-08-18 07:50:58 93

原创 HDU 6138 Fleet of the Eternal Throne (2017多校8 - AC自动机)

题意:给你n 个串, q个查询, 每个查询 输出串x 和 串y 的最大公共子串 且这个串 是其他某些串的前缀。 输出长度。思路:因为场上读错题, 以为是个极水的后缀数组。= =其实是ac自动机我们给n 个串建立ac自动机。字典树中每个节点维护一个 到根的距离(即是前缀的长度)然后给串x 跑一遍自动机, 把经过的点的标记出来, 表示 这个点即是 x 的子串, 又是某个串的

2017-08-17 21:05:26 917

原创 HDU 6129 Just do it(多校7, 组合数 规律)

题意:给你一个数列, m次变换, 每次变换b[i] = a[1]~a[i]的异或值。 求最后的序列。思路:一个找规律的题目。考虑 每一个数对后面的数的贡献。先考虑a1:第一次变换: 1 1 1 1 1第二次变换: 1 2 3 4 5第三次变换: 1 3 6 10 15第四次变换: 1 4 10 20 35不难发现 每一行是 杨辉三角的斜边。所

2017-08-17 10:48:19 358

原创 HDU 4417 Super Mario (树状数组 + 离线)

题意:给你一堆数, m 次询问, 每次询问问你区间里  小于等于x 的数有多少个?思路:很容易往 数据结构 + 离线 上想。一开始写了一发发现想偏了。然后就没然后了。。==========================先把询问存下来, 按照h 排序, 在给那一堆数存下来, 排序。这样枚举询问, 在写个  a数组的指针 , 只要比当前h小, 就往后挪就行, 挪的时候,

2017-08-12 20:48:35 526

原创 HDU 4812 D Tree (2013-南京 树分治 + 逆元 + 离散化)

题意:告诉你树上的点权, 问你是否存在一条路径,(u,v) 使得这条路上的点权乘积 % mod = K? 存在的话输出字典序最小的(u,v)不存在输出no solution思路:这种链上的题 基本就是树剖和分治。树剖要枚举所有链把= =  不太好弄。那就是分治了。找到重心后, 肯定是要处理那些经过重心的链, 然后合并。  是否有解。很容易想到的是 dfs每个点 到重心的

2017-08-12 11:21:10 297

原创 HDU 5649 DZY Loves Sorting (二分 + 线段树)

题意:给你n 个数(1~n的排列), m 个操作, 操作1: 将指定区间 升序排序操作2: 将指定区间降序排列。最后问你某一个的位置的数是多少?思路:神题~~~没想到这能二分去做。。直接二分那个数是啥。 然后模拟整个操作。将比二分的值小的赋为0, 大的赋为1,  然后就是模拟操作对于升序排序, 直接看看这个区间有多少个0, 多少个1,(线段树维护

2017-08-11 19:08:53 356

原创 HDU 1007 Quoit Design(分治)

题意:求最近点对的距离。思路:二维平面上的分治, 很显然 先将点按照x坐标排序。答案来自三部分, 点对完全在左边,完全在右边, 和一个在左一个在右的合并过程。简单说一下合并部分。一般来说 左边完全匹配右边, 来更新答案。但复杂度略高。可以加一些剪枝。比如 把mid 点附近ans 距离的点存下来。从这些点里匹配。在根据y 坐标剪枝。(先按y坐标排序)如果两

2017-08-09 21:34:26 340

原创 CodeForces - 293E Close Vertices(树上点分治 + 树状数组)

题意:一棵树上 告诉你边权。问你有多少点对满足的路上的权值之和 小于等于w, 边数小于等于L。思路:显然树上的点分治。和男人八题一样, 只不过多加了一个边数小于等于L的限制。(一维限制变成二维限制)做法肯定还是一样。只不过在求经过重心满足要求点对时有点变化 (其余算法 看上一篇文章)。。分析一下, 因为边权最大1e9, 边数最大1e5 , 因此, 边数这一个

2017-08-09 18:03:04 459

原创 POJ 1741 Tree (男人八题 - 树分治[点分])

题意:树上n 个点, 求有多少点对满足距离不超过K思路:树上点分治 入门题目。我们每次递归 都要从这棵树的重心开始递归。  从这个点这出其他点到这个点距离来, 然后我们看看有几个点对 距离和满足小于等于K, 这肯定是一部分贡献, 但是有个问题, 这样计算,只有 一个点在一个子树,另一个点在另一个子树才能满足这个距离公式, 如果同在一棵子树, 那么显示式子不成立, 所以,我们需要把这

2017-08-09 16:26:37 407

原创 HDU 6092 Rikka with Subset (2017多校5-背包)

题意:告诉你n 和m告诉你b0,b1,,,bmbi表示数组a 中所有子集的和为i 的方案数。让你还原一个最小字典序的数组a。思路:令dp[i]表示 和为i 的方案数。我们从小到达枚举, 当dp 还不到要求的方案数是 我们就 就一个i, 然后更新其他位置(背包)到达要求就枚举下一个i。这样从小到大枚举即为字典序最小的方案。#include #include

2017-08-08 18:40:51 310

原创 CodeForces 240F TorCoder(线段树)

题意:你给你一个长度为n 的字符串, q 次操作:每次操作将指定区间内拍成字典序最小的回文串。 如果不可能成回文串, 忽略这次操作。思路:大开脑洞一个题, 没想到这题还能线段树搞。(挺巧妙的)线段树统计一个区间内, 每个字母出现的次数。那么对于每个区间操作:[x,y]我们先看看这个区间长度是奇数还是偶数, 如果奇数, 必须只有一个出现次数为奇数的字母。

2017-08-07 21:44:07 353

空空如也

空空如也

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

TA关注的人

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