
POJ
JeraKrs
本人目前就职于百度商业研发部,有需要内推的朋友简历可发我邮箱 jerakrs@qq.com
展开
-
poj 2774 Long Long Message(后缀数组)
题目链接:poj 2774 Long Long Message代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 100005 * 4;struct Suffix_Arr { int n, s[maxn]; int SA[maxn], rank[原创 2015-10-30 23:49:26 · 550 阅读 · 0 评论 -
poj 3208 Apocalypse Someday(数位dp)
题目链接:poj 3208 Apocalypse Someday题目大意:给定n,输出第n大包含666的数字。解题思路:数位dp,用类似AC自动机的思想进行转移。首先dp[i][j]表示说i位最后有j个连续6的情况数,这个预处理出来。那么dp[i][3]即为i位有多少个满足的数。给定n,先确定位数d。然后从最高位向下判断,一开始肯定是需要3个连续的6,所以u为3,然原创 2014-11-13 20:28:49 · 2229 阅读 · 1 评论 -
poj 2185 Milking Grid(KMP)
题目链接:poj 2185 Milking Grid题目大意:给定一个N∗M的矩阵,找到一个最小的r∗c的矩阵,使得原矩阵可以由若干个小矩阵组成,输出r∗c的值。解题思路:将行和列分别看成字符串,然后hash,对hash后的数组分别求KMP。#include #include #include using namespace std;typedef unsigned原创 2014-10-27 16:42:43 · 1051 阅读 · 0 评论 -
poj 1699 Best Sequence(AC自动机+状压DP)
题目链接:poj 1699 Best Sequence题目大意;给定N个DNA序列,问说最少多长的字符串包含所有序列。解题思路:AC自动机+状压DP,先对字符串构造AC自动机,然后在dp[s][i]表示匹配了s,移动到节点i时候的最短步数。#include #include #include #include #include #include using nam原创 2014-11-11 21:38:20 · 1420 阅读 · 0 评论 -
poj 1625 Censored!(AC自动机+DP+高精度)
题目链接:poj 1625 Censored!题目大意:给定N,M,K,然后给定一个N字符的字符集和,现在要用这些字符组成一个长度为M的字符串,要求不包括K个子字符串。解题思路:AC自动机+DP+高精度。这题恶心的要死,给定的不能匹配字符串里面有负数的字符情况,也算是涨姿势了,对应每个字符固定偏移128单位。#include #include #includ原创 2014-11-09 23:08:27 · 928 阅读 · 0 评论 -
poj 3264 Balanced Lineup(线段树)
题目链接:poj 3264 Balanced Lineup题目大意:给定一个序列,每次查询区间上最大值减最小值。解题思路:线段树操作。#include #include #include using namespace std;const int maxn = 50005;#define lson(x) ((x)#define rson(x) (((x)in原创 2014-10-23 23:48:12 · 801 阅读 · 0 评论 -
poj 3067 Japan(线段树)
题目链接:poj 3067 Japan题目大意:给定N和M,表示东部和西部城市的数量,然后K条铁路,每条铁路连接东西城市,问说会有多少次交点。解题思路:线段树维护即可,每条边按照x小的,y小的排序,然后每次查询y+1到M的即可。#include #include #include using namespace std;const int maxn = 1005;原创 2014-10-24 00:11:35 · 1331 阅读 · 0 评论 -
poj 2352 Stars(线段树)
题目链接:poj 2352 Stars题目大意:给定N个点,然后计算每个点左下角有多少个点,然后输出左下角点个数为x的点有多少个。解题思路:线段树维护,单点修改区间查询。#include #include #include using namespace std;const int maxn = 32000;const int maxm = 15000;#de原创 2014-10-23 20:30:55 · 824 阅读 · 0 评论 -
poj 2778 DNA Sequence(AC自动机+矩阵快速幂)
题目链接:poj 2778 DNA Sequence题目大意:给定一些含有疾病的DNA序列,现在给定DNA长度,问有多少种不同的DNA序列是健康的。解题思路:对DNA片段建立AC自动机,因为最多10个串,每个串最长为10,所以最多可能有100个节点,在长度为n时以每个节点终止的健康字符串个数形成一个状态集,通过AC自动机形成的边可以推导出n+1的状态集,走到单词节点是原创 2014-11-08 23:37:59 · 1807 阅读 · 0 评论 -
poj 3667 Hotel(线段树)
poj 3667 Hotel题目大意:给定一个区间,两种操作:1 x:找到区间中最左边,将长度为x的区间放入,要求尽量靠左。2 l r:清空l,r + l - 1这段区间。解题思路:线段树的区间合并,每个节点记录S,L,R即可。#include #include #include using namespace std;const int maxn =500原创 2014-09-28 10:18:58 · 666 阅读 · 0 评论 -
poj 2991 Crane(线段树)
题目链接:poj 2991 Crane题目大意:就是有一个机械手臂,有n结,给定每节的长度,一开始为垂直的。有m次操作,每次将x关节变成角度d,并且输出手臂末端的坐标。解题思路:点的旋转公式(r为逆时针的角度):x′=x∗cos(r)−y∗sin(r)y′=x∗sin(r)+y∗cos(r)没有做过类似的题目,线段树每个节点记录的为每节旋转的角度以及单节末端的位置。原创 2014-09-26 21:01:28 · 1118 阅读 · 0 评论 -
poj 3225 Help with Intervals(线段树)
题目链接:poj 3225 Help with Intervals题目大意:模拟集合操作,输出最终的集合。解题思路:线段树。U l r:[l,r]区间置为1I l r:[0,l),(r,maxn]置为0D l r:[l,r]区间置为0C l r:[0,l),(r,maxn]置为0,[l,r]区间取逆S l r:[l,r]区间取逆。然后基本水水的线段树,注意一下区间开原创 2014-09-26 21:10:15 · 1251 阅读 · 0 评论 -
poj 1436 Horizontally Visible Segments(线段树)
题目链接:poj 1436 Horizontally Visible Segments题目大意:给定n条垂直的线段,保证两两线段不重叠。问说有多少组三元线段可以互相看到。解题思路:线段树+暴力。表示很不能理解的题目,复杂度略高。先将线段按照x坐标排序,然后为每个线段标号,从左向右每次修改区间。在修改之前查找一下该区间没有被完全覆盖的线段,用vector存小来,最后再暴力计数。#原创 2014-09-26 20:52:14 · 660 阅读 · 0 评论 -
poj 2482 Stars in Your Window(扫描线)
题目链接:poj 2482 Stars in Your Window题目大意:平面上有N个星星,问一个W∗H的矩形最多能括进多少个星星。解题思路:扫描线的变形。只要以每个点为左上角,建立矩形,这个矩形即为框框左下角放的位置可以括到该点,那么N个星星就有N个矩形,扫描线处理哪些位置覆盖次数最多。#include #include #include #include us原创 2014-10-12 08:58:46 · 1074 阅读 · 0 评论 -
poj 2001 Shortest Prefixes(字典树)
题目链接:poj 2001 Shortest Prefixes题目大意:给定一个字符串集合,要求使得每个字符串尽量缩短,但是仍然能区分开。解题思路:根据字符串集建立字典树,并且每插入一个字符串,所有路径上节点均加1,表示该子串是这个字符串的前缀。然后对每个字符串进行一次查找,当碰到节点的统计值为1时,表示当前子串仅为该字符串的前缀,即为要找的字符串。#inclu原创 2014-10-29 21:24:22 · 989 阅读 · 0 评论 -
poj 2513 Colored Sticks(欧拉通路+并查集+字典树)
题目链接:poj 2513 Colored Sticks题目大意:有N个木棍,每根木棍两端被涂上颜色,现在给定每个木棍两端的颜色,不同木棍之间拼接需要颜色相同的端才可以,问最后能否将N个木棍拼接在一起。解题思路:欧拉通路+并查集+字典树。欧拉通路,每个节点的统计度,度为奇数的点不能超过2个。并查集,判断节点是否完全联通。字典树,映射颜色。#include原创 2014-10-29 21:31:48 · 1085 阅读 · 0 评论 -
poj 1743 Musical Theme(后缀数组)
题目链接:poj 1743 Musical Theme代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 2 * 1e4 + 5;struct Suffix_Arr { int n, s[maxn]; int SA[maxn], rank[ma原创 2015-10-30 23:48:19 · 453 阅读 · 0 评论 -
poj 1330 Nearest Common Ancestors(LCA)
题目链接:poj 1330 Nearest Common Ancestors代码#include <cstdio>#include <cstring>#include <vector>#include <queue>#include <algorithm>using namespace std;const int maxn = 1e4 + 5;const int inf = 0x3f3f原创 2015-11-12 15:15:36 · 447 阅读 · 0 评论 -
poj 2546 Circular Area(几何)
题目链接:poj 2546 Circular Area代码#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;const double pi = 4 * atan(1.0);const double eps = 1e-8;inline int dcmp (dou原创 2015-11-09 20:38:30 · 533 阅读 · 0 评论 -
poj 3415 Common Substrings(后缀数组 | 后缀自动机)
题目链接:poj 3415 Common Substrings代码-后缀数组#include <cstdio>#include <cstring>#include <stack>#include <vector>#include <algorithm>using namespace std;typedef long long ll;typedef pair<int,int> pii;c原创 2015-11-06 21:55:09 · 711 阅读 · 0 评论 -
poj 3237 Tree(树链剖分)
题目链接:poj 3237 Tree题目大意:给定一棵树,三种操作:CHANGE i v:将i节点权值变为vNEGATE a b:将ab路径上所有节点的权值变为相反数QUERY a b:查询ab路径上节点权值的最大值。解题思路:树链剖分,然后用线段树维护节点权值,成端更新查询。#include #include #include using namespace原创 2014-10-17 09:37:45 · 1340 阅读 · 0 评论 -
poj 2763 Housewife Wind(树链剖分)
题目链接:poj 2763 Housewife Wind题目大意:给定一棵树,然后2种操作:0 u:输出路径s到u的权值和,并且s变成u1 i w:节点i增加w解题思路:树链剖分,然后用线段树维护,单点修改区间查询。#include #include #include using namespace std;const int maxn = 100005;原创 2014-10-17 09:33:14 · 1083 阅读 · 0 评论 -
poj 1195 Mobile phones(二维树状数组)
题目链接:poj 1195 Mobile phones题目大意:四种操作0 s:清空(1,1)~(s,s)1 x y a:在(x,y)点加上a2 x1 y1 x2 y2:询问矩形(x1,y1)~(x2,y2)的和。3:结束解题思路:纯二维树状数组。#include #include #include using namespace std;const int原创 2014-11-17 23:34:03 · 909 阅读 · 0 评论 -
poj 2503 Babelfish(字典树)
题目链接:poj 2503 Babelfish题目大意:给定若干个字符串间的映射关系,然后是若干次查询,每次查询一个字符串,判断该字符串是否有映射串,有的话输出映射串,否则输出eh。解题思路:字典树水题。#include #include #include using namespace std;const int maxn = 1e6+5;const i原创 2014-10-29 21:27:50 · 904 阅读 · 0 评论 -
poj 3764 The xor-longest Path(字典树)
题目链接:poj 3764 The xor-longest Path题目大意:给定一棵树,每条边上有一个权值,找出一条路径,使得路径上权值的亦或和最大。解题思路:dfs一遍,预处理出每个节点到根节点路径的亦或和rec,那么任意路径均可以表示rec[a] ^ rec[b],所以问题就转换成在一些数中选出两个数亦或和最大,那么就建立字典树查询即可。#include #in原创 2014-10-30 22:57:51 · 1031 阅读 · 0 评论 -
poj 2408 Anagram Groups(hash)
题目链接:poj 2408 Anagram Groups题目大意:给定若干个字符串,将其分组,按照组成元素相同为一组,输出数量最多的前5组,每组按照字典序输出所有字符串。数量相同的输出字典序较小的一组。解题思路:将所有的字符串统计字符后hash,排序之后确定每组的个数并且确定一组中字典序最小的字符串。根据个数以及字符串对组进行排序。#include #incl原创 2014-10-30 22:52:30 · 1657 阅读 · 0 评论 -
poj 1816 Wild Words(字典树+DFS)
题目链接:poj 1816 Wild Words题目大意:给定N个模板,即正则表达式,然后每次有一个询问串,输出能被哪些模板匹配。解题思路:对模板建立字典树,然后每次询问即在字典树做DFS搜索,注意'*'的情况,可以匹配一个和多个,所以在结尾的时候要注意。并且,模板串有重复的情况。#include #include #include #include usin原创 2014-10-30 18:40:29 · 1116 阅读 · 0 评论 -
poj 1204 Word Puzzles(字典树)
题目链接:poj 1204 Word Puzzles题目大意:给定一个有字符组成的N行M列的矩阵,就这是Q次查询,每次查询包括一个字符串,要求在矩阵中找到起始点以及方向。解题思路:对查询建立字典树,然后暴力枚举矩阵中的起点和方向。数据有点弱,就这样给过了。#include #include #include using namespace std;const原创 2014-10-30 18:35:51 · 836 阅读 · 0 评论 -
poj 3693 Maximum repetition substring(后缀数组)
题目链接:poj 3693 Maximum repetition substring题目大意:求一个字符串中循环子串次数最多的子串。解题思路:对字符串构建后缀数组,然后枚举循环长度,分区间确定。对于一个长度l,每次求出i和i+l的LCP,那么以i为起点,循环子串长度为l的子串的循环次数为LCP/l+1,然后再考虑一下从i-l+1~i之间有没有存在增长的可能性。#include原创 2014-09-05 22:38:21 · 1001 阅读 · 0 评论 -
poj 2886 Who Gets the Most Candies?(线段树)
题目链接:poj 2886 Who Gets the Most Candies?题目大意:N个人围成一圈玩约瑟夫环游戏,不同的是,步长不固定,由前一个出局的人决定,给定K表示起始的人。第i个淘汰的人将获得g(i)个糖果,问说谁获得的糖果最多。g(x)为x的因子个数。解题思路:起始g(x)是成阶段的,所以打表处理处g(x)递增值,对于每个N,一开始找到小于等于N的最大x,那么第x个淘原创 2014-09-18 16:41:00 · 1006 阅读 · 0 评论 -
poj 3080 Blue Jeans(KMP)
题目链接:poj 3080 Blue Jeans题目大意:给出若干个串,求出这若干个串的最长公共子串。解题思路:枚举第一个串的起始,作为匹配串,和剩下的所有串进行KMP维护最长的公共串。#include #include #include using namespace std;const int N = 105;const int M = 15原创 2014-03-19 22:06:42 · 1176 阅读 · 0 评论 -
poj 2752 Seek the Name, Seek the Fame(KMP)
题目链接:poj 2752 Seek the Name, Seek the Fame题目大意:给出一个字符串,要求找出所有的子串满足是该字符串的前缀的同时也是后缀,输出下表即可。解题思路:首先getJump后,获得jump[n]即为最大的匹配的前缀后缀串,这样的话不断p = jump[p]直到p = 0都是满足的前缀后缀串。#include #includ原创 2014-03-19 22:02:44 · 1067 阅读 · 0 评论 -
poj 1785 Binary Search Heap Construction(笛卡尔树)
题目连接:poj 1785 Binary Search Heap Construction题目大意:给出一些节点,每个节点包括label 和 priority, 需要将这些节点排成一颗笛卡尔树(按照label为一颗二叉搜索树,按照priority为一个堆,数值大的一定在树的上层)。解题思路:一开始按照自己的想法,将节点按照priority的大小排序,从大到小,然后按照建二原创 2013-10-19 23:20:49 · 1689 阅读 · 0 评论 -
poj 2418 Hardwood Species(二分)
poj 2418 - Hardwood Species题目大意:给出一系列字符串,统计每个字符串出现的概率(保留4位小数)。解题思路:一开始看到时间10s,觉得是水题,就很嘚瑟用暴力去做,结果超时了,后来觉得数据可能比较大,想到二叉树,不过觉得用二分貌似也可以,就试着做了了一下。#include #include #include using name原创 2013-10-19 22:49:04 · 1103 阅读 · 0 评论 -
poj 1573 - Robot Motion(BFS递推)
题目链接:POJ 1573- Robot Motion题目大意:给出一张图,图上标明了可行走的方向一个机器人从指定的位置进入,问能否离开这张图(任意方向)解题思路:bfs因为只有一个方向,即移动方向已经确定,所以不需要递归,代码量也很少,所以建议尝试递推。#include #include const int N = 105;const int dir原创 2013-10-18 14:24:53 · 983 阅读 · 0 评论 -
poj 1068 Parencodings(模拟)
题目链接:POJ 1068-Parencodings题目大意:对与一个全为括号的序列,定义两种表示方法,P-sequence,表示第i个右括号左边有几个左括号。W-sequence表示第i个右括号与它左边的第j个左括号配对,现在给出P-sequence,求W-sequence。解题思路:简单的模拟,因为总数不会大于20,所以不用考虑的太复杂。#include原创 2013-10-18 14:18:17 · 1088 阅读 · 0 评论 -
poj 1269 Intersecting Lines (判断两条直线的状态)
题目连接:http://poj.org/problem?id=1269题目思路:给出两条直线,给出的方式是两个点。 判断两条直线是平行,重合还是相交,相交的话求出交点。解题思路:确定两点求直线, 根据直线的参数去判断状态,要注意一些特殊情况,比如平行x,y的直线等。#include #include double a, b, c, d;double x[原创 2013-08-21 20:52:29 · 1004 阅读 · 0 评论 -
poj 2756 Autumn is a Genius(高精度加法)
题目连接:http://poj.org/problem?id=2756题目大意:求两个数的和,题目给出了上限,却没有给出下限,所以可以是负的无穷大。解题思路:模板套用(写模板的时候有考虑正负)。模板连接:http://blog.youkuaiyun.com/keshuai19940722/article/details/10087993int main()原创 2013-08-20 00:06:37 · 1588 阅读 · 0 评论 -
poj 1604 Just the Facts(简单数学)
题目连接:http://poj.org/problem?id=1604解题思路:每次计算后去除后位0,以及保留5位长度。#include #include int main() { int n, sum; while (scanf("%d", &n) == 1) { sum = 1; for (int i = 1; i <= n; i++) {原创 2013-08-19 23:57:50 · 1100 阅读 · 0 评论 -
poj 2389 Bull Math(高精度加法)
题目连接:http://poj.org/problem?id=2389解题思路:模板套用。模板连接:http://blog.youkuaiyun.com/keshuai19940722/article/details/10087993int main() { char str1[N], str2[N]; bign num1, num2, sum;原创 2013-08-20 00:01:30 · 1198 阅读 · 0 评论