POJ
aozil_yang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ 3580 SuperMemo (Splay)
思路:区间的一系列操作, 还有翻转什么的,显然Splay主要说一下 那个循环右移的操作吧次数先对总长度取模, 因为相当于有循环节。然后 这个操作 相当于 把一个区间分成两个子区间, 把后面挪到前面。假设两个区间是 [s1, e1]和 [s2, e2]那么先把s2-1 转到根, e2+1 转到根的下面, 将e2转到e2+1的下面,将 e2+1的左子树 切下来。这样就把后原创 2017-10-12 16:52:51 · 645 阅读 · 0 评论 -
POJ 2674 Linear world (经典题目 -- 这个有坑= =)
题意:在一条线上,告诉你每个蚂蚁的位置和方向,两只蚂蚁碰面后原路返回,告诉你线的长度,和蚂蚁速度(所有的蚂蚁速度都一样),求最后一只蚂蚁掉落的时间和名字。思路:很久之前做的一道思路题目了。 这个题比较坑把 记录一下。两只蚂蚁碰面后相当于不回头一直往前走。那么我们可以记录下来每只蚂蚁假如不碰面掉落的时间,取个最大值就是最后一只蚂蚁掉落的时间,在把那个时间对应的每只蚂蚁位置记录下来原创 2017-03-15 15:26:42 · 556 阅读 · 0 评论 -
POJ 2559 Largest Rectangle in a Histogram(RMQ+二分)
题意:给你n 个宽度为1 高度不同的矩形,要求求最大的矩形面积, 高度低的可以向挨着的高度高的扩展。思路:很多都是单调栈,dp之类的。给大家 提供另一个思路:枚举矩形中心,二分右边最远能到哪,二分左边最远能到哪,更新最大值即可。一个区间合不合适,只要这个区间的最小值是否等于中心的高度即可。可以用RMQ处理。#include #include #include #原创 2017-03-15 00:23:31 · 529 阅读 · 0 评论 -
POJ 1284 Primitive Roots (欧拉函数--求原根数量)
题意:给你一个奇素数P, 求有多少个x 满足 x^i %P 为0~P-1. 其中1 思路:这正是对原根的描述假设一个数g 对于P来说是原根,那么g^i mod P 结果两两不同,且有1 这个题是求原根数量为phi [ phi[n] ]个欧拉函数直接打表就好了#include #include #include using namespace std;int原创 2017-03-14 22:02:36 · 554 阅读 · 0 评论 -
POJ 2155 Matrix (二维树状数组)
题意:给你一个N*N的矩阵,一开始每个元素都是0,给你q 个操作,每个操作,可以把(x1,y1)到(x2,y2)的矩形里元素取反(0变1,1变0)。 可以查询每个元素的值。思路:二维树状数组的应用。但是二维树状数组是用来求每个子矩阵元素之和的。这里思路比较灵活一些。我们先来考虑一个一维的问题:我们把[L,R] 这个区间 进行取反的话我们可以在L这个位原创 2017-03-14 20:44:56 · 357 阅读 · 0 评论 -
POJ 3281 Dining (最大流)
题意:告诉你每个牛喜欢的食物和饮料,每个食物和每个饮料只能给一只牛,求最大有多少牛 能得到喜欢的食物和饮料?思路:给每个食物向牛连边, 给每个饮料向喜欢的牛连边, 牛拆点 容量为1 保证前面只有一种食物,后面只有一种饮料。食物连源, 饮料连汇,求最大流即可。#include #include #include #include #include #define Siz原创 2017-03-14 13:56:36 · 324 阅读 · 0 评论 -
POJ 3169 Layout(差分约束_ Bellman-ford)
题意:给你n 只牛。告诉你一些牛的最远距离是多少, 告诉你一些牛的最近距离是多少, 并且 第i 只牛一定在第i-1只牛的右边,求1到n的最远距离, 不存在输出-1, 无限远输出-2;思路:差分约束。我们知道最短路的判断:如果d[e.to] >= d[e.from] + e.dist;那么d[e.to] = d[e.from] + e.dist所以 d[e.to]原创 2017-03-30 14:32:07 · 574 阅读 · 0 评论 -
对主席树的一点理解 -- 例题POJ 2104
断断续续看了许久的主席树,简单记录一下。什么样的题目用主席树呢,比如POJ 2104 求区间第K大的数是谁?当时做这个题时,感觉分块+二分可以搞,就写了好久,改了好久,始终TLE,还是学学主席树把= =。先吐槽一下线段树:线段树竟然是被一个黄嘉泰的大佬因不会划分树来代替的,,,,,因缩写是HJT取名为主席树= =!orz主席树大体思路:我们怎样求区间第K大数呢:假如我们原创 2017-03-22 21:50:26 · 977 阅读 · 2 评论 -
LA 3026 && POJ 1961 Period(KMP求前缀的最短循环节)
题意:给定一个长度为n 的字符串s,求它的每个前缀的最短循环节?思路:我们想一下KMP的next 函数。next[i]表示 由S[0],S[1],,,,S[i] 构成的字符串的最大前缀长度 使得前缀等于后缀。那么这个问题就很好办了。假设当前枚举到i 位置了。(目前字符串的长度是i)假设最短循环节是X。那么next[i] 一定是i - X;所以我们只需要判断i 是原创 2017-03-28 22:16:44 · 567 阅读 · 0 评论 -
POJ 3181 Dollar Dayz (有点像背包的dp -- JAVA大数)
题意:给你k种硬币,价值分别为1,2,3,,k,要求问你凑出n 元钱的数量?思路:令dp[i][j] 表示利用前i 种硬币来凑出 j 元钱的数量。那么边界 dp[1][i] 都是1那么dp[i][j+o*i] += dp[i-1][j]j表示用前i-1 种硬币凑出来的价值,o 是利用第i 种硬币的数量。但是n 能到1000,种类能到100,那么这个数量会爆long lo原创 2017-03-20 12:43:12 · 556 阅读 · 0 评论 -
POJ 1742 Coins (背包)
大体题意:告诉你有n 种硬币,告诉你每种硬币的价值和数量,问你价值1~m 能凑出多少种来?思路:类似背包:令dp[i] = 1 表示价值为i 可以凑出来, 等于0 表示凑不出来。那么直接对每一种硬币看dp[j - a[i]]是否为1 即可,为1的话,就可以转移到dp[j]还有另外一个条件 就是数量问题:我们直接在开一个cnt 数组, cnt[j]表示凑出价值为j ,需要原创 2017-03-08 20:09:02 · 280 阅读 · 0 评论 -
例题7-9 UVA - 1601 && POJ 3523 The Morning after Halloween (双向BFS)
大体题意:你给一个h*w 的网格,网格上最多有三只小鬼,小鬼用小写字母abc 表示,他们的目标用ABC表示,问小鬼移动到目标最短的步数,他们可以同时走,走法有五种:上下左右和不动,其中有几种情况的走法是非法的:1.两只小鬼一步以内交换了位置。2.两只小鬼的下一步是同一个位置。其余情况合法!思路:先将不是#的位置变成标号。然后把所有空格提出来建立一张图,把初始位置原创 2016-05-29 13:00:01 · 811 阅读 · 1 评论 -
POJ 1077 Eight (正向BFS + 康托展开)
题意不说了 八数码问题:和上篇博客 HDU 1043 题目是一样的!但是做法上有些出入。HDU 时间限制比较长,而且是多组输入,所以要逆向bfs 进行打表处理。而POJ 1077 这个题目,时间是1S ,单组输入。因此输入一组 搜索一组即可。9个数的排列 判重用康托展开来做。但是这个队列要自己写,STL的queue 会超时。自己写的队列,在输出时 能很方原创 2017-01-24 16:25:24 · 847 阅读 · 0 评论 -
POJ 1769 Minimizing maximizer (dp + 线段树)
题意:找最少的区间使得依次连续覆盖所有n 个数。思路:令dp[i]表示覆盖到 以i 为终点的区间的最少个数。那么dp[i] 转移肯定来自 s[j]~t[j] 里面的,我们需要 找一个k 使得 s[j] dp[i] = min(dp[i], dp[k]+1);找最小值可以用线段树优化。边界是dp[1] = 0#include #include #include原创 2017-03-15 21:05:31 · 672 阅读 · 0 评论 -
POJ 1704 Georgia and Bob (Nim博弈)
题意:排成直线的格子上有n 个棋子,棋子i 在左数第pi 个格子上,Georgia 和Bob 轮流选择一个棋子向左移动,每次可以移动一格及以上任意多格,但是不允许反超其他的棋子,也不允许将两个棋子放在同一个格子上。无法进行移动的一方失败,假设Georgia 先进行移动,当双方都采取最优策略时,谁会获胜?思路:Nim 博弈:有n 堆石子,每一堆数量告诉你,一方可以从某一堆拿至少一个石原创 2017-03-16 17:22:50 · 367 阅读 · 0 评论 -
POJ 3252 Round Numbers (数位dp)
题意:求区间内 二进制 0 的个数大于等于 1 的 个数。思路:显然数位dp。但要考虑二进制 0 和1 的个数。不太好做。我们平常写数位dp 都是十进制的。如果我们直接按二进制直接数位dp 就和十进制一样了。。令dp[i][j][k] 表示 第i位, 目前有j 个0 k 个1的方案数。然后就是很基本的数位dp了。#include #include原创 2017-09-07 19:41:25 · 395 阅读 · 1 评论 -
HDU 1625 Censored! (AC自动机 + 大数 + dp)
题意:给定你n 种字符, 和p 个禁止串, 问你长度为m 的串有多少种 不包含 禁止串?思路:AC自动机是显然的。矩阵快速幂也可以 ,dp 也可以。但是这是个大数。 极限答案有85位左右。我用快速幂写了一发,不是爆内存就是因为内存开的过大 小样例都出不来。只能考虑dp了。dp 状态很好想:令dp[i][j] 表示目前走 第i 位长度, 在自动机上j 节点的方案原创 2017-08-24 08:25:27 · 429 阅读 · 0 评论 -
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 · 415 阅读 · 0 评论 -
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 · 323 阅读 · 0 评论 -
POJ 2828 Buy Tickets (线段树)
题意:n 个人进入队列, 告诉你每个人插入的位置。求最后的序列。思路:线段树很好写。线段树结点维护 这个区间内剩余座位的数量。倒着枚举, 根据座位剩余量 往里插即可。#include #include #include using namespace std;const int maxn = 200000 + 10;int ans[maxn];int s原创 2017-07-15 18:35:31 · 333 阅读 · 0 评论 -
POJ 3481 Double Queue (Splay || 水题)
题意:三种操作:1. 插入对键值[key, value]2. 输出最大的key 并删除。3. 输出最小的key 并删除。思路:这显然是一个map。 其实一个水题, 拿map 模拟直接过了。 但是最近练习一下Splay。 就写炸了= =很容易用Splay模拟 来实现。第一种操作: 直接从根开始插结点即可。第二种操作,最大的key 直接从当前根结点找后原创 2017-07-14 16:50:33 · 461 阅读 · 0 评论 -
POJ 2955 Brackets (区间DP)
题意:求区间内 最多正确的括号匹配数。思路:令dp[i][j] 表示i~j 区间内 最多正确的括号匹配数。那么dp[i][j] = max(dp[i,k] + dp[k+1][j]);注意边界即可。#include #include #include using namespace std;const int maxn = 100 + 10;char s[m原创 2017-07-04 13:48:58 · 270 阅读 · 0 评论 -
POJ Hotel (线段树--区间合并[区间赋值])
题意:n间空房子, 操作1问你能否连续住x 个房子, 如果能 就输出最左边的编号。 如果不能输出0;操作2 将给定的区间[x,y] 清空。思路:线段树区间合并。像极了HDU 1540 点击打开博客链接建树 和 那个题一样, 每个结点 维护 一个区间 从左边开始最大连续长度l, 从右边开始最大连续长度r, 中间最大连续长度m(只不过改成了区间赋值的形式,加一个懒惰原创 2017-06-20 22:06:18 · 1034 阅读 · 0 评论 -
POJ 2528 Mayor's posters (线段树区间赋值 + 离散化)
题意:给你n 个海报的左端点和右端点 依次贴好后, 求最后能看见几个海报?思路:正常思路想到的是把2n 个端点依次离散化,然后区间赋值,然后查询线段树上每一个区间,最后统计赋值数的种类。但是这样有个小坑:例如1 - 10 1 - 4 6 - 10, 离散化后 区间是 1- 4 1- 2 3 - 4 这样 就把1-4 给覆盖掉了, 就会少数一个海报。得到2n 个原创 2017-06-06 18:10:34 · 539 阅读 · 0 评论 -
POJ 2217 Secretary (后缀数组)
题意:求最长公共子串。思路:后缀数组直接将两个串S和T用一个未出现的字符'\0'连接起来。 求后缀数组。当两个sa[i] 属于两个串时,更新lcp[i]最大值即可。#include #include #include #include #include using namespace std;const int maxn = 10000 + 10;in原创 2017-04-26 22:14:08 · 494 阅读 · 0 评论 -
POJ 1743 Musical Theme (后缀数组 + 二分)
题意:给你一个数组,求最长重复不重叠子串, 一段子串 如果每个元素加上或减去某个数 也是相同的。思路:虽然每个元素加上或减去某个数也是一样的, 那么这一段相邻的差值是不变的, 那么我们就可以求 差值数组的后缀数组。这样 就可以直接用后缀数组来做了,论文里的例题。二分长度k, 然后给sa 数组进行分块。每一块中height必须都要大于等于k那么每一块中 的最大sa - 最原创 2017-04-28 17:06:33 · 535 阅读 · 0 评论 -
POJ 3261 Milk Patterns (后缀数组 + 二分)
题意:给你一个两万的数组, 求可重叠的K次最长重复子串。思路:后缀数组经典问题类似于求不可重叠的最长重复子串。先求一遍后缀数组, 给sa数组 分块。二分长度m每一块 height 必须大于等于 长度m。然后如果存在一块, 满足数量大于等于k 那么这个长度m就是合法的。 继续二分即可。#include #include #include #include原创 2017-04-28 18:07:39 · 378 阅读 · 0 评论 -
POJ 3659 Cell Phone Network (树dp)
大体题意:给你一个棵树,要求选择尽量少的点,覆盖所有的点,选择一个点后,它相邻的点全都覆盖。思路:很明显树形dp。令dp[i][0],表示 选择i 这个点, 覆盖了以i 为根的子树所有的点。dp[i][1]表示 i 这个点不选,但选了 它的孩子一个结点,覆盖了以i 为根的子树所有的点。dp[i][2]表示i 这个点不选,但选了它的父亲,覆盖了 以i 为根的子树的所有结点。原创 2017-02-28 23:02:31 · 376 阅读 · 0 评论 -
POJ 2790 Consecutive ones (搜索 + 剪枝)
大体题意:给你一个n*m的0-1矩阵(n,m 思路:因为保证了答案唯一,所有正解只有一个,因此不合法的情况会有很多,因此我们可以考虑 搜索 + 剪枝的方案。矩阵只有0 和1 因此一个位置要么填0要么填1,这两种方式都考虑到剪枝就可以很轻松的过了!最先想到的肯定是枚举列,在枚举每一行检测是否合法!剪枝方法:如果这一列这一个位置是1的话,那么前面的一个位置也必须是1,否则就原创 2017-01-11 14:23:02 · 416 阅读 · 0 评论 -
POJ 1267 Fence(几何 + 二分)
大体题意:给你n 条木棍,要用它们组成凸多边形,每个木棍都要用上,使得面积最大,数据范围3 如果不存在的话,要输出0.00.(结果保留两位小数)思路:首先这个题目得知道,固定边长的多边形面积最大是 圆内接多边形!参考网站:点我打开网站是然后思路是很明确的,我们直接二分枚举圆的半径R,然后判断那n 个边是否能放在这半径为R的圆里面。判断方法:你可以把根据圆的半原创 2017-01-10 14:53:54 · 674 阅读 · 0 评论 -
POJ 3170 Knights of Ni (双向BFS打表记录)
Knights of NiTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 2032 Accepted: 872DescriptionBessie is in Camelot and has encountered a sticky situation: she原创 2016-07-28 18:30:53 · 721 阅读 · 0 评论 -
POJ 3175 Finding Bovine Roots (枚举)
Finding Bovine RootsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 4374 Accepted: 876DescriptionThe cows are trying to find their roots. They are not so原创 2016-07-28 18:20:47 · 536 阅读 · 0 评论 -
POJ 1686 Lazy Math Instructor (中缀表达式计算)
Lazy Math InstructorTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 3819 Accepted: 1320DescriptionA math instructor is too lazy to grade a question in the原创 2016-05-05 22:33:03 · 817 阅读 · 0 评论 -
POJ 1469 COURSES(匈牙利算法二分图最大匹配)
COURSESTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 20333 Accepted: 7992DescriptionConsider a group of N students and P courses. Each student visits原创 2016-04-19 20:32:27 · 657 阅读 · 0 评论 -
POJ 2104 K-th Number (划分树)
K-th NumberTime Limit: 20000MS Memory Limit: 65536KTotal Submissions: 46308 Accepted: 15433Case Time Limit: 2000MSDescriptionYou are working for Macrohard c原创 2016-04-20 17:37:24 · 797 阅读 · 0 评论 -
POJ 3071 Football (概率DP)
FootballTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 4344 Accepted: 2220DescriptionConsider a single-elimination football tournament involving 2n t原创 2016-04-12 17:13:13 · 2098 阅读 · 0 评论 -
POJ 1265 Area (皮克定理)
AreaTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 5737 Accepted: 2564DescriptionBeing well known for its highly innovative products, Merck would defin原创 2016-04-04 00:14:42 · 923 阅读 · 0 评论 -
POJ 2954 Triangle (皮克定理)
TriangleTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 5646 Accepted: 2433DescriptionA lattice point is an ordered pair (x, y) where x and y are both i原创 2016-04-03 23:34:53 · 519 阅读 · 0 评论 -
POJ 3067 Japan (树状数组)
JapanTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 24701 Accepted: 6650DescriptionJapan plans to welcome the ACM ICPC World Finals and a lot of roads原创 2016-03-20 23:24:42 · 523 阅读 · 0 评论 -
POJ 2229 Sumsets(dp)
SumsetsTime Limit: 2000MS Memory Limit: 200000KTotal Submissions: 15575 Accepted: 6202DescriptionFarmer John commanded his cows to search for different sets of nu原创 2016-03-17 15:47:18 · 417 阅读 · 0 评论
分享