
POJ
lajiyuan_
已经退役啦,会不定期更新cf博客 or 其他计算机知识相关的博客.
展开
-
【POJ2774】后缀数组 / Hash+二分
POJ2774 链接 题意求两个串的最长公共子串,我们可以把两个串用一个特殊字符拼接,然后跑SA求出heightSA求出heightSA求出height,由于最长公共子串肯定是heightheightheight中的某一个,而且要满足sa[i]和sa[i−1]sa[i]和sa[i−1]sa[i]和sa[i-1]分别属于两个串,所以只要跑一遍后缀数组遍历一遍heightheightheight就...原创 2018-05-17 02:06:53 · 385 阅读 · 0 评论 -
【POJ 3261 Milk Patterns】 后缀数组/Hash+二分
POJ3261 题意就是找一个串中至少出现过k次的最长可重叠子串。 我们用一个串构造出后缀数组,之后进行GetHeight,然后二分答案进行验证,验证的时候将height数组分块,如果连续至少k-1个height都大于当前验证值,表示答案可行。 POJ3261代码#include<stdio.h>#include<iostream>#include<...原创 2018-06-15 17:11:41 · 219 阅读 · 0 评论 -
【POJ 1661 Help Jimmy】 DP
POJ1661 POJ1661题目链接 题意就是一个小人在最高的平台上选择向左或者向右走,每秒的行走速度和下降速度都是1,有一个最长的下降的距离,超过这个距离就会GG,求最小时间 由于小人只能选择从左侧下降或者从右侧下降,我们只要设置两个下降状态,然后按照高度排序从下向上一下就可以了 设置dp[0][i]为小人站在i块选择从左侧下降时的到达地面的最短时间dp[0][i]为小人站在i块选...原创 2018-08-30 18:41:32 · 133 阅读 · 0 评论 -
【POJ 3666 Making the Grade】 DP
POJ3666 本题题意就是用最小代价将原序列变为单调不增或者单调不减序列, 由于单调不增和单调不减是对称的,我们先想一下单调不减的情况 这个题首先我们想一下比较暴力的转移方程 dp[i][j]=abs(j−w[j])+min(dp[i−1][k])−−(k<=j)dp[i][j]=abs(j−w[j])+min(dp[i−1][k])−−(k<=j)dp[i][j]=abs(...原创 2018-08-30 18:44:44 · 219 阅读 · 0 评论 -
【POJ-1091-跳蚤】 容斥原理+质因数分解
POJ-1091-跳蚤 题意简化之后就是给你一个数m,一个数n,让你构造一个长度为n+1的序列,第n+1个数为m,保证这n+1个数<=m,而且这n+1个数的最大公约数为1。 我们无法直接计算最大公约数为1的组合数,所以我们只要计算出所有最大公约数不为1的再用总排列数减去即可,最大公约数不为1的时候只能为m的因子,所以我们只要对m的质因子容斥一下,求一下每种质因子的组合作为最大公约数的情况...原创 2018-09-12 22:15:23 · 232 阅读 · 0 评论 -
【POJ-2318-TOYS】 判断点与直线的关系
POJ-2318-TOYS题意用n条总左到右排好序的直线分成将一个长方形分成n+1个区域,给你m个点,统计每个区域内点的个数1&amp;lt;=n,m&amp;lt;=5e31&amp;lt;=n,m&amp;lt;=5e31&lt;=n,m&lt;=5e3做法我们考虑我们考虑我们考虑n^2的做法即可,从左到右扫描每条线的做法即可,从左到右扫描每条线的做法即可,从左到右扫描每条线判断当...原创 2018-10-13 22:59:47 · 604 阅读 · 0 评论 -
【POJ-2398-Toy Storage】判断点与直线的关系
POJ-2398-Toy Storage题意用n条直线分成将一个长方形分成n+1个区域,给你m个点,统计每个区域内点的个数1&lt;=n,m&lt;=1e31&lt;=n,m&lt;=1e31<=n,m<=1e3做法我们可以按照n条直线与上界的交点对n条直线排序,之后暴力扫描看他在哪个区域即可。代码#include <stdio.h&...原创 2018-10-13 23:01:12 · 325 阅读 · 0 评论 -
【POJ-3304-Segments】 判断线段与直线相交情况
POJ-3304-Segments题意给你n条线段,求是否有一条直线,满足所有直线在其上面的投影有公共的交点1&lt;=n&lt;=1001&lt;=n&lt;=1001<=n<=100做法首先如果投影有公共的交点,那么如果在那个公共的交点上做垂线,肯定会穿过n条线段,所以我们只要看是否存在一条直线与所有线段都相交即可,而与这n条线断都相交的直...原创 2018-10-14 02:19:34 · 225 阅读 · 0 评论 -
【POJ-1269-Intersecting Lines】 两直线关系的判断
POJ-1269-Intersecting Lines题意给你一对直线,判断两条位置关系做法先用叉积判断两条直线是否平行,如果不平行则是相交,平行的话判一下一条直线上的点是否在另一条直线上,若在则是重合,不在则是平行,。代码#include <stdio.h>#include <math.h>#include <iostream>#includ...原创 2018-10-15 15:12:51 · 179 阅读 · 0 评论 -
【POJ-1556-The Doors】线段求交+DP
POJ-1556-The Doors题意一个房间内有平行的n堵墙,每个墙上有两道门,求从起点走到终点的最短路径。例如下图:做法可以到某个门的最短距离一定是由某个门的两端点出发的,所以我们只要从左到右算出到达每个点的最短距离,每个点用所有之前可以直接到达这个点的点去松弛这个点,复杂度O(n3)O(n^3)O(n3)代码#include <stdio.h>#include...原创 2018-10-15 15:42:10 · 186 阅读 · 0 评论 -
【POJ-2653-Pick-up sticks】计算几何+STL
题目链接http://poj.org/problem?id=2653题意在一个二维平面上依次放置n条木棍,问最后没有被覆盖的木棍有哪些,n&lt;=1e5,答案&lt;=1000在一个二维平面上依次放置n条木棍,问最后没有被覆盖的木棍有哪些,n&lt;=1e5,答案&lt;=1000在一个二维平面上依次放置n条木棍,问最后没有被覆盖的木棍有哪些,n<=1...原创 2018-10-19 14:27:05 · 230 阅读 · 0 评论 -
【POJ 2778 DNA Sequence】 AC自动机+DP+矩阵快速幂
POJ2778 本题题意是给你一个字符集和一个长度m,还有一些敏感串,求出字符集构造出的长度为m的字符串中不包含敏感串的串的个数。 我们用到AC自动机的性质,想象一下如果从len=k向len=k+1转移,AC自动机上每个状态之间有多少种转移方法,就可以构造出对应的转移矩阵,再利用矩阵快速幂就可以求解。在构造转移矩阵的时候,要注意如果某串的后缀是敏感串,也是不可以转移的。 转移矩阵TnTnT^...原创 2018-06-13 19:35:07 · 153 阅读 · 0 评论 -
【POJ 2408 Anagram Groups】 字典树(Trie树)
POJ2408 本题题意是,把可以通过重新排列变成相同单词的单词放入一个集合,最后按找集合元素由多到少输出前五个集合,如果几何元素相同,按照字典序由小到大输出 我们考虑,如果两个单词可以通过重新排列组合变成相同单词,那么他们的字典序最小的排列方式一定是相同的,所以我们可以利用每个元素的最小排列方式判定是否在同一个集合,字典树在这里用于判定某个字符串时候出现过。最后用set来保存以便维持字典序 ...原创 2018-06-13 00:01:14 · 443 阅读 · 0 评论 -
【POJ3450】后缀数组+二分
POJ3450 链接 题意为求多个串的最长公共子串,参考上题的做法,我们可以用特殊字符对所有字符串进行拼接,但是问题在于如果找到这个最长公共子串。数据量为n&lt;4000len&lt;200n&lt;4000len&lt;200n2−n2−n2-n遍历height数组,如果有某一段连续的区间heightheightheight数组均大于midmidmid,而且这段区间拥有来自nnn个串的后缀...原创 2018-05-17 02:08:29 · 513 阅读 · 0 评论 -
【POJ3294】 后缀数组+二分
POJ3294 链接 题意为给你n个字符串,求至少出现在[n2][n2][ \frac{n}{2}]个串中的最长公共子串,如果有多个全部输出。本题和上题几乎一模一样,只是要把判断条件由来自n个串改成来自[n2][n2][\frac{n}{2}]个串,注意一下存储答案的方式,如果当前二分量存在答案并且第一次访问,那么清空vectorvectorvector,如果不是第一次访问,就在vecto...原创 2018-05-17 02:09:38 · 426 阅读 · 0 评论 -
【POJ3415】后缀数组+单调栈
POJ3415 题意为给定两个字符串A和B,求长度不小于k的公共子串的个数(可以相同)这道题我们先考虑暴力的做法,我们可以将两串拼接求出heightheightheight数组,答案为所有分别属于A,B的后缀的(lcp−k+1)(lcp−k+1)(lcp-k+1)之和,我们可以n2n2n^{2}解决这个问题。但是本题的范围n2n2n^{2}是会超时的,所以我们要考虑heightheigh...原创 2018-05-17 02:10:42 · 433 阅读 · 5 评论 -
【POJ 2752 Seek the Name, Seek the Fame 】 KMP
POJ2752 本题题意为求出所有在后缀中出现过的前缀的最后一个元素的下标 本题要考虑一下next数组的本质,其实就是最长的出现在后缀中的前缀,但是由于本题要求所有的而不是最长的,考虑到next数组的递归过程,其实就是对每一个当前长度的前缀,都有完全相同的后缀与之对应,所以就不断递归next数组即可求解。 POJ2752代码#include<stdio.h>#inclu...原创 2018-05-29 20:33:14 · 162 阅读 · 0 评论 -
【POJ 3080 Blue Jeans 】 KMP/后缀数组
POJ3080 本题题意为求m个字符串长度至少为3的最长公共子串 由于m只有10而且len小于60,我们可以选择枚举某一个串的子串并用str.find()或者kmp验证是否所有该子串在所有字符串中出现过,也可以用经典的二分长度将height数组分块的后缀数组做法 POJ3080(find解法//由于只查找是否出现过,算法复杂度差距不大,所以这里给出简单一些的写法#include&l...原创 2018-05-29 20:34:31 · 232 阅读 · 0 评论 -
【POJ 2001 Shortest Prefixes】 字典树(Trie树)
POJ2001 题意就是求一个能代表这个字符串的最短前缀,也就是只有这个字符串具有的前缀。 做法很显然,我们先构建好Trie树,然后对每个单词进行find,递归到直到节点出现次数为1,表示这个节点只有这一个单词走过,返回就ok。这里我用了string不断拼接字符,然后直接返回,减少了一些代码量。 POJ2001代码#include<stdio.h>#include<...原创 2018-06-12 23:40:37 · 170 阅读 · 0 评论 -
【POJ 3630 Phone List】字典树(Trie树)
POJ3630 本题题意就是给你一个字符串集合,问你否所有的字符串都不是其他人的前缀。 首先我们构造出Trie树,然后对每个字符串find,当find的路径上如果出现其他字符串结尾标记,就说明其他字符串是当前字符串的前缀。注意这里对每个字符串find的时候只要搜索到len−1len−1len-1即可,如果搜索到lenlenlen,那么将会将本身的字符串统计进去。 POJ3630代码#...原创 2018-06-12 23:42:14 · 272 阅读 · 0 评论 -
【POJ 2513 Colored Sticks】 字典树(Trie树)
POJ2513 本题题意是给一堆木棒,每种木棒左右两端有两种颜色,木棒进行拼接的时候,只有相同颜色之间才可以拼接,问最后是否可以将所有木棒拼为一根木棒。 我们考虑把同一种颜色的点聚在一起,我们就可以得到一个无向图,如果这个无向图是欧拉图,代表展开之后可以一笔走完,也就是可以连接成一条木棒。所以我们用trie树判断每种颜色出现的次数,再用并查集判一下图是否连通,最后用欧拉图的性质判断一下是否为欧...原创 2018-06-12 23:47:53 · 268 阅读 · 0 评论 -
【POJ 1451 T9】字典树(Trie树)
POJ1451 本题题意比较有意思,大概就是模拟手机输入法,先给你一个用户的词库,即每个单词出现的次数,这个时候再按照九键输入法给你一个数字序列,问你在输入这个序列的过程中,出现的字符串顺序,也就是对于每个数字序列,给出一个最有可能出现的字符串。 这道题我的做法比较巧妙,但是不怎么会算复杂度,还是很快的过去了。首先我们考虑,对于每个数字序列,我们都可以用一个string去映射,这样我们可以用一...原创 2018-06-12 23:51:08 · 567 阅读 · 0 评论 -
【POJ 1816 Wild Words】 字典树(Trie树)
POJ1816 本题的题意是给你n个模式串和m个匹配串,模式串中有?和∗?和∗?和*两种字符,?可以匹配任意一种字符,∗∗*可以匹配任意个字符,问每种匹配串可以和之前哪些模式串匹配。 我们先构建好字典树,对于每个匹配串实现find,find的时候用类似dfs的写法,如果当前节点的字符或者?存在,直接dfs下一个位置的字符,如果当前字符对应的位置有∗∗*存在,那么就从匹配串之后的每一个位置进行往...原创 2018-06-12 23:53:47 · 349 阅读 · 0 评论 -
【POJ-1023-The Fun Number System】 思维题
The Fun Number System题意给你一个n,k,和一个长度为k的由′p′,′n′两种字符组成的串S给你一个n,k,和一个长度为k的由&#x27;p&#x27;,&#x27;n&#x27;两种字符组成的串S给你一个n,k,和一个长度为k的由′p′,′n′两种字符组成的串SS[i]=′p′时对答案的贡献为+2iS[i]=&#x27;p&am...原创 2018-10-31 23:15:34 · 234 阅读 · 0 评论