数据结构
最光阴.
这个作者很懒,什么都没留下…
展开
-
C - Cows POJ - 2481
Farmer John’s cows have discovered that the clover growing along the ridge of the hill (which we can think of as a one-dimensional number line) in his field is particularly good. Farmer John has N cows原创 2017-05-02 20:45:14 · 314 阅读 · 0 评论 -
Problem I. International Collegiate Routing ContestGym - 100548I
题目意思是,说给予n个32位IP地址,每个地址的后面有一个K,每个K代表与当前所给的IP地址的前K位相同的话,就为同一IP地址,然后问你,最少再补充多少的IP地址使得能构成所有的IP地址。 思路:字典树的题目,对于每个32位的串,输入字典树中,如果当前K小于32那么就只导入到第K位,然后在当前节点做标记,建完树后,跑一遍DFS就可以了。#include #include #includ原创 2017-10-16 19:50:27 · 275 阅读 · 0 评论 -
回文树
点击打开链接这篇博客写的真是很好的,让我看懂了回文树。在这篇博客的基础上我再说一下我自己的理解,回文树,是一颗树(其实是两颗树),在树中每个节点都代表着不同回文串,以及会记录这种回文串的个数,由于回文串是分为长度为奇数的回文串和偶数的回文串,所以这棵树是由两个根节点构成的,一个是代表长度为-1的回文串的根节点(这里-1只是一种定义,并不存在实际的串),一个是代表长度为0的回文串的节点。然后扫描原创 2017-10-20 21:57:04 · 267 阅读 · 0 评论 -
2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛(G. Query on a string)kmp+线段树
题目大意,给予两个串,S和T, S很长,T很短(这个很重要), 有n次操作,操作分为两种形式, 一种是把S的第i个字符替换, 第二中是截取S中l到r的一段,求T在这段出现的次数。思路:先构建一个线段树,所有节点初始化为0,然后对S和T进行kmp匹配,如果T在S中出现,就把T这次出现的T【0】位置,所对应的线段树节点变为1。例如: S为‘ADADBBAD', T为’AD', 那么线段树的节点原创 2017-09-10 10:07:59 · 455 阅读 · 0 评论 -
K - Finding Hotels HDU - 5992
kd树模板题目,建立kd树,对于每个输入进行搜索,在原来的基础上加入价格比对就可以了。kd树其实就是一种暴力+减枝的操作。#include #include #include #include #include #include #include #include #include #include #include #include #include #incl原创 2017-09-10 09:57:23 · 357 阅读 · 0 评论 -
kd树c++实现
#include #include #include #include #include using namespace std;//对输入的n个点组成的点集合,对于每次输入的点,求离输入点最近的k个点的位置。#define LL long long int #define maxn 50080 #define K 5 //空间最大维度。int num,原创 2017-09-10 09:54:04 · 2407 阅读 · 0 评论 -
H - Hard challenge HDU - 6127
思路:对所有的点进行极角坐标排序,然后从最小的点开始,对每个点i,二分查找它的极角逆时针旋转180度的角,在所有点之间的位置。如果这个角坐标的点是L右边的是R,只要求当前点到L点的权值总和,再算R顺时针转到i的权重总和.(这里用线段树维护下)。然后两个权重相乘就是当前直线的权值,然后总体取最大。主要是要想到,对于n个点,做一条过原点的直线,将点集分为两块,这条直线的值就是,直线两边点权重总和乘原创 2017-08-15 19:13:01 · 463 阅读 · 0 评论 -
线段树模板
struct IntervalTree{ int sumv[maxnode]; int minv[maxnode]; int maxv[maxnode]; int addv[maxnode]; int setv[maxnode]; void maintain(int o,int L,int R) { int lson=o<<转载 2017-05-11 21:36:55 · 164 阅读 · 0 评论 -
D - Dirt Ratio HDU - 6070详解 (二分+线段树区间修改+思维)
这道题目比赛的时候做了半天,结果基本就是挂机的状态。事后看了题解也是一脸懵逼的。最后看了标程才知道怎么做的。看懂之后才发现这个这个题目那么有趣,真是思维太巧妙了(吐槽一下多校赛题解,只有做出了的人才能看懂。(ㄒoㄒ))。 他是这样解决的二分枚举答案,对于答案如果成立那么一定存在size(l, r)/(r-l+1) < = mid.所以化简得到size(l, r) + l * mid <= (r原创 2017-08-04 21:36:12 · 360 阅读 · 0 评论 -
HDU6138 F Fleet of the Eternal Throne(字典树+后缀数组+二分)
题目大意:给予n个字符串,有q次查询,对于每次查询,求出x串与y串的最长公共子串长度,该子串至少要是n个串中的一个串的前缀。首先对输入的n个串建立字典树,方便查询前缀,然后对于每次查询输入的x与y,把x串与y串取出来,两个串连接在一起,中间用个没有出现过的字符隔开,对这个串套用后缀数组模板,然后对答案二分。对于每个二分出来的mid,按照扫描一遍height数组,如果当前的height[i]原创 2017-08-17 17:44:24 · 381 阅读 · 0 评论 -
G - Maximum repetition substring POJ - 3693 (后缀数组)
又是一道后缀数组的题目,和上一道题目是类似的,不过要输字符串本身,在同等重复次数下输出,字典序最小的。 我们只需要记录下所有达到最大重复次数的,重复段的长度就可以了,然后按照sa数组排序好的字典序,扫一遍就就可以了,遇到的第一个就可以直接输出来了。#include <iostream>#include <stdio.h>#include <cstring>#include <algorith原创 2017-08-07 22:07:22 · 256 阅读 · 0 评论 -
B - Beam Cannon HDU - 5091
Recently, the γ galaxies broke out Star Wars. Each planet is warring for resources. In the Star Wars, Planet X is under attack by other planets. Now, a large wave of enemy spaceships is approaching. Th原创 2017-05-17 21:40:17 · 308 阅读 · 0 评论 -
D. Paths in a Complete Binary Tree CodeForces - 792D
T is a complete binary tree consisting of n vertices. It means that exactly one vertex is a root, and each vertex is either a leaf (and doesn’t have children) or an inner node (and has exactly two chil原创 2017-04-25 19:03:57 · 352 阅读 · 0 评论 -
Aragorn's Story HDU - 3966 (树链剖分)
树链剖分模板题目。树链剖分,就是先选定好根节点,由根节点往下,沿着子树节点最多的节点往下,将其拆成链,再由链组成线段树的数据结构#pragma comment(linker,"/STACK:100000000,100000000")#include #include #include #include using namespace std;const int MAXN = 5原创 2017-10-16 20:55:12 · 347 阅读 · 0 评论