随笔分类 -  数据结构

摘要:#include #include using namespace std;#define mod 20071027int dic[401000][28],val[401000];char str[301000];int dp[301000];int s,sz;char T[110];void in... 阅读全文
posted @ 2014-12-10 23:20 贝尔摩德 阅读(153) 评论(0) 推荐(0)
摘要:给出一个字符串,对于每次的k,求所有子串(去除重复后的)中排名为k的L和R,其中如果有多组解,输出L最小的。后缀数组处理过后,sum[i]表示 sa[1] 到 sa[i] 一共有多少个非重复字串,在sum数组中二分求出k的lower_bound=pos,那么第一次出现这个子串的后缀就是sa[pos]... 阅读全文
posted @ 2014-09-17 17:08 贝尔摩德 阅读(226) 评论(0) 推荐(0)
摘要:#include #include #include using namespace std;int a[100100],q[100100],l[100100],r[100100];int main(){ int i,n,cnt; while(scanf("%d",&n),n!=0) ... 阅读全文
posted @ 2014-08-28 21:26 贝尔摩德 阅读(118) 评论(0) 推荐(0)
摘要:#include #include #include using namespace std;#define maxn 100100int wa[maxn],wb[maxn],wv[maxn],ws[maxn];int r[maxn],sa[maxn];char str[maxn];int cmp(... 阅读全文
posted @ 2014-08-23 15:56 贝尔摩德 阅读(185) 评论(0) 推荐(0)
摘要:#include #include #include #define maxn 1220double x[maxn],y[maxn],d;bool vis[maxn];int p[maxn];int n;double dist(int i,int j){ return fabs( (x[i]-... 阅读全文
posted @ 2014-07-12 14:05 贝尔摩德 阅读(128) 评论(0) 推荐(0)
摘要:将两个字符串连接,中间加一个没出现的字符,最后添加0。然后从小到大枚举长度ans,对于每个ans,对height数组分组,答案只可能出现在某组内,对每组进行检查,如果只存在两个字符串一个在前一个在后则return true,贴的代码是别人的。#include #include #include us... 阅读全文
posted @ 2014-05-05 15:30 贝尔摩德 阅读(202) 评论(0) 推荐(0)
摘要:#include #include #include #define MAXNODE 50000#define SIGMA_SIZE 100using namespace std;int ch[MAXNODE][SIGMA_SIZE];int f[MAXNODE]; // fail函数int ... 阅读全文
posted @ 2014-04-28 16:53 贝尔摩德 阅读(148) 评论(0) 推荐(0)
摘要:#include #include #include using namespace std;#define MAXNODE 100100#define SIGMA_SIZE 135int ch[MAXNODE][SIGMA_SIZE];int f[MAXNODE]; // fail函数int... 阅读全文
posted @ 2014-04-28 16:09 贝尔摩德 阅读(141) 评论(0) 推荐(0)
摘要:先复制一遍数组,在用一个数组sum[ i ]表示前 i 个数字的和,对于以第k个数开头的情况,只需找出sum[ k ]到sum[ k+n ]的最小值min,如果min - sum[ k-1 ]大于0则满足。#include #define maxn 2001000int a[maxn],sum[ma... 阅读全文
posted @ 2014-04-16 16:56 贝尔摩德 阅读(195) 评论(0) 推荐(0)
摘要:#include #include #define maxn 1001000int id[maxn],p[maxn];bool vis[maxn];int find(int x){ if(p[x]==x) return x; else return p[x]=find(p[x]);}vo... 阅读全文
posted @ 2014-03-28 21:18 贝尔摩德 阅读(124) 评论(0) 推荐(0)
摘要:#include #include #define maxn 28#define inf 500000int sz;int ch[inf][maxn],val[inf],sum[inf];int idx(char c) { return c-'a';}void init() { sz =... 阅读全文
posted @ 2014-01-29 16:55 贝尔摩德 阅读(116) 评论(0) 推荐(0)
摘要:int wa[maxn],wb[maxn],wv[maxn],ws[maxn];int cmp(int *r,int a,int b,int l){return r[a]==r[b]&&r[a+l]==r[b+l];} //就像论文所说,由于末尾填了0,所以如果r[a]==r[b](实际是y[a]... 阅读全文
posted @ 2014-01-14 14:51 贝尔摩德 阅读(159) 评论(0) 推荐(0)
摘要:AC自动机的裸题,不过需要注意几个地方,keywords中有重复的,而且模板中会重复出现keywords~#include #include #define SIGMA_SIZE 26#define MAXNODE 500100using namespace std;int ch[MAXNODE][... 阅读全文
posted @ 2013-12-21 11:50 贝尔摩德 阅读(175) 评论(0) 推荐(0)
摘要:#include #include #define maxn 10050int n,m;int p[maxn],x[maxn*10],y[maxn*10];int find(int x){ if(p[x]==x) return x; else return p[x]=find(p[x]);}int ... 阅读全文
posted @ 2013-12-10 23:25 贝尔摩德 阅读(93) 评论(0) 推荐(0)
摘要:题目大意:初始时,有n个龙珠,编号从1到n,分别对应的放在编号从1到n的城市中。现在有两种操作:T A B,表示把A球所在城市全部的龙珠全部转移到B城市。(第一次时,因为A球所在的城市只有一个球,所以只移动1个,如果有多个,则全部移动)。Q A,表示查询A。要求得到的信息分别是:A现在所在的城市,A... 阅读全文
posted @ 2013-12-08 15:20 贝尔摩德 阅读(145) 评论(0) 推荐(0)
摘要:题目大意:给出一些虫子之间的关系,看是否有同性恋。对于任意两个虫子,若有关系则在这两个节点之间连边,如果有同性恋,则肯定会有奇数步的回路,若没有,则不存在同性恋。(二分图的判定)#include #include using namespace std;#define maxn 2010int co... 阅读全文
posted @ 2013-11-27 21:38 贝尔摩德 阅读(139) 评论(0) 推荐(0)
摘要:出自http://www.cppblog.com/MatoNo1/archive/2011/04/17/144390.aspx扩展KMP:给出模板串A和子串B,长度分别为lenA和lenB,要求在线性时间内,对于每个A[i](0k,所以又有A[i..p]==B[i-k..p-k],设L=next[i... 阅读全文
posted @ 2013-11-16 23:33 贝尔摩德 阅读(153) 评论(0) 推荐(0)
摘要:题目大意:对于一个字符串,找由循环字符串组成的位置,并输出最多循环了几次,比如两个样例,第一个是 aaa ,所以在第二个位置由子串a循环两次得到,第三个位置由a循环3次,第二个样例aabaabaabaab,在第二个位置由a循环两次,在第六个位置由aab循环两次,在第9个位置由aab循环3次,在第12... 阅读全文
posted @ 2013-11-15 21:06 贝尔摩德 阅读(140) 评论(0) 推荐(0)