—————数据结构—————
文章平均质量分 82
DT2131
Rage, rage against the dying of the light.Do not go gentle into that good night.
展开
-
HDU 3613 Best Reward (加权manacher)
题意:对于字母a~z每个字母都有一个权值给出一个字符串,让你拆成两部分,如果一段是回文串,这一段的价值就是这一段上所有字母的权值,若不是回文串这一段的总价值为0。求两段的最大总价值。思路:先manacher跑一边。由于价值是连续的,所以再跑一边,求出从开头到每一点的总价值,然后枚举每个分割点,对于每个分割点分情况讨论就是了。代码:#include using namesp原创 2016-12-05 17:13:18 · 320 阅读 · 0 评论 -
HDU 3294 Girls' research (manacher模板题)
题意:给你一个字符串,对其凯撒加密后,求最长回文串代码:#include using namespace std;const int MAXN=400000;struct Manacher{ char Ma[MAXN*2]; int Mp[MAXN*2]; int Mx[MAXN*2]; int len; double ave; i原创 2016-12-05 17:20:26 · 422 阅读 · 0 评论 -
POJ 3974 Palindrome (manachr模板题)
题意:求最长回文串的长度代码:#include #include #include using namespace std;const int MAXN=1000010;struct Manacher{ char Ma[MAXN*2]; int Mp[MAXN*2]; int Mx[MAXN*2]; int len; double a原创 2016-12-05 17:15:45 · 286 阅读 · 0 评论 -
HDU 4513 吉哥系列故事――完美队形II
题意:中文思路:改下模板中的匹配规则代码:#include using namespace std;const int MAXN=200000;struct Manacher{ int Ma[MAXN*2]; int Mp[MAXN*2]; int Mx[MAXN*2]; int len; double ave; int l原创 2016-12-05 17:24:09 · 319 阅读 · 0 评论 -
HDU 5371 Hotaru's problem (manacher+线段树)
题意:假设对于字符串A,它的反串为A'。给出一个字符串,找出形式为AA'A的最长串的长度。思路:先用manacher跑一边,得到对于每一个位置i,以i为中心回文串的长度Mp[i]以回文串AA'的中心i1为圆心,以AA'的半径Mp[i1]为半径,做圆O1 以回文串A'A的中心i2为圆心,以A'A的半径Mp[i2]为半径,做圆O2若要满足连续的AA'A必有原创 2016-12-05 16:40:21 · 385 阅读 · 0 评论 -
POJ 3667 Hotel 线段树区间合并
题意:模拟订房系统。给出N,M。代表房间数和操作次数。每组操作中 1 表示入住 k 间连续房间,要求安排的房间连续且在最左边,如果能入住输出最左边的房号,不能则 -1.2 表示退从第K 间房起连续的P间房。思路:先查找最左端的房子,当左区间的房间的最大连续小于要求时(即查找到最左端)返回,返回后通过区间合并判断是否满足题意。代码:#include #include原创 2016-11-15 21:33:44 · 346 阅读 · 0 评论 -
HDU 3308 LCIS(线段树区间合并)
题意:U X Y : 更新X位置为YQ X Y : 查询【X,Y】区间的最长连续严格上升序列的长度思路:本题做区间合并有四种情况:1.只有左区间在【X,Y】中2.只有右区间在【X,Y】中3.左右区间都在【X,Y】中,但合并后,左区间的右端点和右区间的左端点结合不能产生新的连续段4.左右区间都在【X,Y】中,合并后,左区间的右端点和右区间的左端点结合能产生新的连续原创 2016-11-06 16:29:00 · 399 阅读 · 0 评论 -
POJ 3067 Japan (树状数组求逆序对)
题意:首先一行是T组数据,每组数据第一行是N,M,K,N代表左侧点的数量,M代表右侧点的数量,K代表有K条连线次下K行有两个值X,Y代表左边第X和右边第Y个点相连。问这些连线最多有几个交点。(同起点的线不相交)原创 2016-11-06 16:07:11 · 307 阅读 · 0 评论 -
CodeForces 733C Epidemic in Monstropolis 暴搜+树状数组做法
题意:给你一个数组A,是否能组成给定的数组B合成规则:必须是大数合小数,大数和小数后,大数的值变成大数+小数合成时数字会自动向前补齐注意:合成的时候数字的位置会发生改变思路:1.先从左到右划分一遍数组A,如果不能整分,A数组肯定不能被合成B数组。划分后每个区间对应合成B数组中的一个值2.再暴搜每一个小区间,看能不能按规则合成出每个区间要合成的那个数。原创 2016-11-06 15:47:13 · 476 阅读 · 0 评论 -
poj 2299 Ultra-QuickSort 线段树求逆序数+离散化||归并排序求逆序数
题意:求数列逆序数思路:数据较大,但数据量较小,故先离散化,再做线段树单点更新。离散化同poj 2528点击打开链接。求逆序数同 poj 2352点击打开链接。代码:#include #include #include #include #include #include #define ls rt<<1,l,mid#define rs (rt<<1)+1,m原创 2016-10-25 12:15:45 · 389 阅读 · 0 评论 -
poj 2352 && hdu 1541 Stars 线段树
题意:按序在图上插入点,求每次插入点左下方有几个点,点的个数即为此点的等级。输出每个等级点的个数。思路:由于插入点的顺序是先下后上的故可以x轴为准,先查询点的左边有几个点,再插入点,不用考虑y轴。代码:#include #include #include #include using namespace std;#define ls rt<<1,l,mid#de原创 2016-10-25 12:04:25 · 352 阅读 · 0 评论 -
POJ 2823 Sliding Window 线段树
题意:给出一个长度为 N 的数组,从左至右求长度为 K 的区域中的最大值和最小值。思路:1.线段树维护一个最大值,一个最小值。从左至右循环更新树子叶节点。2.优先队列.代码:优先队列:点击打开链接线段树:#include #include #include using namespace std;#define ls rt<<1,l,mid#define原创 2016-10-25 11:55:22 · 292 阅读 · 0 评论 -
POJ 2528 Mayor's posters 线段树+离散化
题意:几张纸覆盖在一起,求能露出来的纸的个数。(区间覆盖问题)思路:区间最大值为1E8,开数组直接做MLE。注意到此题端点个数仅为20000个,故先离散,再线段树。代码:map离散 610ms#include #include #include #include #include using namespace std;#define ls rt<<1#d原创 2016-10-25 11:41:07 · 358 阅读 · 0 评论 -
FZU 1901 KMP找前后缀等串
Period IITime Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u FZU 1901DescriptionFor each prefix with length P of a given string S,ifS[i]=S[i+P] for原创 2016-07-18 17:16:53 · 605 阅读 · 0 评论 -
HDU 1358 kmp找周期子串
PeriodTime Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u HDU 1358DescriptionFor each prefix of a given string S with N characters (each character ha原创 2016-07-18 17:23:14 · 433 阅读 · 0 评论 -
HDU 1686 求子串的数量
E - OulipoTime Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u HDU 1686DescriptionThe French author Georges Perec (1936–1982) once wrote a book, La di原创 2016-07-19 03:04:59 · 673 阅读 · 0 评论 -
HDU 1711 KMP求匹配位置
Number SequenceTime Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u HDU 1711DescriptionGiven two sequences of numbers : a[1], a[2], ...... , a[N], and原创 2016-07-19 03:07:16 · 375 阅读 · 0 评论 -
CodeForces - 749D set+二分
题意: N个人竞拍一件物品,一共有N个报价,一个人可多次报价也可不报价。 先给出N,接着是报价人和报价 随后询问K次,求每次询问中去除M个人后谁能拍得此物,且最低价是多少 每次询问给出人数M和M个人的序号思路: 首先注意到由于拍卖的性质,报价是升序给出的 可以用vector保存每个人原创 2017-01-01 20:30:12 · 501 阅读 · 0 评论 -
hdu 2275 Kiki & Little Kiki 1 (STL)
题意:模仿一个stack,push x为向stack中推入一个x,pop x为从stack中推出一个比x小的最大的数,如果有这样一个数输出这个数,否则输出No Element。思路:AVL树问题,用STL即可。代码:#include using namespace std;int main(){ int n,x; multiset ans;原创 2016-12-24 16:39:35 · 472 阅读 · 0 评论 -
HDU 4393 Throw nails (STL)
题意:T组测试数据,每组N个(从1到N)二元一次函数(y=kx+b)给出ki和bi,求x=0,1,2,3.......时,y最大的那个,并删去思路一:考虑到本题的数据范围,0x思路二:考虑到本题的数据范围,0故先暴力枚举前501组,剩下的按k序输出代码:思路一(AC):#include using namespace std;const int M原创 2016-12-24 17:02:20 · 591 阅读 · 0 评论 -
HDU 4022 Bombing (STL)
题意:给出包含N个点的点集和M次操作对于每个操作 w zw=1时 删除 坐标y=z的点,并输出个数w=0时 删除 坐标x=z的点,并输出个数思路:AVL树问题,STL实现即可代码:#include using namespace std;const int INF=0x3f3f3f3f;typedef struct Node{ int k1;原创 2016-12-24 16:48:03 · 341 阅读 · 0 评论 -
归并排序
阿斯顿原创 2016-11-02 21:13:48 · 400 阅读 · 0 评论 -
HDU 2203 亲和串
亲和串Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uHDU 2203DescriptionChristmas is coming! But on Christmas Eve, Li Laoshi still has one more clas原创 2016-07-19 03:13:24 · 541 阅读 · 0 评论 -
KMP模板
思路来自Matrix67:http://www.matrix67.com/blog/archives/115#include #include #include #include using namespace std;int flag[200]={0};void pre(string str2){ memset(flag,0,sizeof(flag)); int转载 2016-07-02 00:10:33 · 311 阅读 · 0 评论 -
桶排模板
仅适用于非负数值,也可以把这个排序结果当成数的绝对值排序结果,要排负数时正负分开,负数的顺序是倒的罢了。long long* Radix_sort(long long x[],int n){//x:待排数组 n:数组长度 int MaxLen=(int)ceil(log10((double)(*max_element(x,x+n)))); queue temp; for(原创 2016-07-08 10:00:08 · 362 阅读 · 0 评论 -
KMP算法
转自Matrix67的BLOG:http://www.matrix67.com/blog/archives/115KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串转载 2016-07-01 21:13:36 · 872 阅读 · 0 评论 -
HDU 1238 最长子串
B - SubstringsTime Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uSubmit Status Practice HDU 1238Appoint description: System Crawler (Jul 14, 2016 1:53:30 PM)原创 2016-07-18 17:12:26 · 618 阅读 · 0 评论 -
HDU 3498 whosyourdaddy (可重复覆盖舞蹈链)
题意:给出N个点,M个边构成图。每选取一个点都可以覆盖其相邻点,问要覆盖所有点最少选几个点思路:每个点都作为一个点集,进行爆搜覆盖,舞蹈链模板题。代码:#include using namespace std;const int maxn=60;int L[maxn*maxn],R[maxn*maxn],U[maxn*maxn],D[maxn*maxn];int C原创 2016-12-20 11:58:15 · 488 阅读 · 0 评论 -
FZU 1686 神龙的难题(DLX可重复覆盖)
题意:中文思路:数据只有15*15,可以将每一个魔物编号,再遍历得到火球落到每个点上会伤害的魔物序号,进行可重复覆盖,求得最小次数。代码:#include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned l原创 2016-12-20 12:17:15 · 328 阅读 · 0 评论 -
HDU 3529 Bomberman - Just Search!(DLX可重复覆盖)
题意:模仿炸弹人游戏,本题中炸弹的威力无限(无阻碍时威力为一整列一整行),给出至大15*15的地图,问最少同时放置几个炸弹,可以将墙一下炸完。思路:对每个墙编号,遍历图求出把炸弹放在每个点可以炸的墙,然后舞蹈链可重复匹配代码:#include using namespace std;typedef long long ll;typedef unsigned long lo原创 2016-12-20 12:24:21 · 288 阅读 · 0 评论 -
HDU 2295 Radar (DLX可重复覆盖+二分)
题意:给出N个城市的坐标,M个雷达的坐标,求用少于K个雷达站覆盖所有城市的最小雷达半径(所有启用的雷达站的半径都一样)思路:二分枚举半径,每次枚举得到一组覆盖表,对这张表进行覆盖,看能不能用少于K个雷达覆盖所有城市。若能向左(半径减小)继续二分,若不能向右(半径增大)继续二分。直到精度误差满足要求二分停止。代码:#include #define mid (le+ri)原创 2016-12-20 12:37:57 · 474 阅读 · 0 评论 -
HDU 5880 Family View (AC自动机)
题意:模拟敏感词和谐器,T 组数据,每组数据 N 个子串,一个母串,输出和谐的母串思路:母串带空格,用gets就行,用子串的长度做标记,匹配时若匹配到,和谐掉’标记数‘个数个字符就行。代码:#include #include #include #include #include using namespace std;struct Trie{ int ne原创 2016-11-16 10:58:52 · 521 阅读 · 0 评论 -
HDU 5384 Danganronpa AC自动机
题意:T 组数据, N 个母串 ,M 个子串,求每个母串的匹配思路:子串可能相同,算多次匹配代码:#include #include #include #include #include using namespace std;struct Trie{ int next[100010][26],fail[100010],end[100010]; i原创 2016-11-16 10:53:09 · 378 阅读 · 0 评论 -
HDU 2222 Keywords Search AC自动机模板题
题意:T组样例,N个子串,查询母串中子串出现的次数。思路:ac自动机模板题代码:(kuangbin模板)#include #include #include #include #include using namespace std;struct Trie{ int next[500010][26],fail[500010],end[500010];原创 2016-11-16 11:00:21 · 314 阅读 · 0 评论 -
HDU-3065 病毒侵袭持续中 AC自动机
题意:中文题思路:统计一下就行代码:#include #include #include #include #include using namespace std;int res[1010];struct Trie{ int next[1010*55][128],fail[1010*55],end[1010*55]; int root,L;原创 2016-11-16 10:48:41 · 442 阅读 · 0 评论 -
HDU 2896 病毒侵袭 AC自动机
题意:中文题思路:不同的子串打上各自的id,跑匹配的时候统计一下就行。注意一个子串可能会多次出现在母串中代码:#include #include #include #include #include using namespace std;struct Trie{ int next[150000][128],fail[150000],end[150000原创 2016-11-16 10:45:41 · 313 阅读 · 0 评论 -
HUST 1017 Exact cover (DLX不可重复覆盖)
题意:N个点集,M个点,问最少几个点集可覆盖M个点思路:不可覆盖舞蹈链模板题代码:#include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;const int in原创 2016-12-20 12:12:05 · 348 阅读 · 0 评论 -
NEFU 1215 统计序列和 (线段树模板题)
题意:中文思路:线段树模板题(update时可不用push_up)代码:#include #include #define ls l,mid,rt<<1#define rs mid+1,r,(rt<<1)|1#define mi (l+r)>>1using namespace std;const int MAXN=200005;long long ans,原创 2016-12-20 12:45:49 · 318 阅读 · 0 评论 -
NEFU 1210 补充字符
题意:中文思路:显然,用KMP求得NEXT数组(判断重复性)后由串尾字符的NEXT,可知子串的长度对比原串长度后,即可得到答案。代码:#include #include #include using namespace std;const int MAXN=100005;int next[MAXN];char p[MAXN];void get_next()原创 2016-12-20 13:19:27 · 297 阅读 · 0 评论 -
HDU 1166 敌兵布阵
线段树搜索就行#include #include using namespace std;const int MAXN=5e5;typedef struct Node{ int left; int right; int mid(){ return (left+right)/2; } int val;}Node;Node tree[原创 2016-09-21 21:41:14 · 321 阅读 · 0 评论